1、跟踪监测性能指标:
- 应用层生态系统:应用服务、应用服务器、数据库、生态系统中其他服务
- JRE层:类加载情况、JIT编译情况、垃圾回收情况、线程情况
- 操作系统层:系统/内核状态、锁状态、线程状态
- 硬件层:内存带宽/内存吞吐量/内存占用、CPU/内核的使用、CPU缓存效率/使用/级别、处理器结构、IO状态
通常关心的指标有以下几个。
CPU:CPU状态、内核状态、缓存命中和没有命中的次数、分支预测、流水线、条件转移、load-store的工作模式等
内存:内存使用、内存、带宽、读写状态、读操作的最大带宽、写操作的最大带宽、最大容量、与结构相关的。
JVM/GC:收集与变化相关的信息、收集一般或者并发的GC各个阶段的信息、并发工作队列和工作状态、内部队列或缓存等。
-
监控
首先是从监控环节做起。
监控方式分为三种:主动(报警设定)、被动(网络分流器)、离线(日志抓取)。
可以选用的工具有三类:
第三方——VisualVM、Java Flight Recorder
JVM自带命令——PrintCompilation、PrintGCDetails(+PrintGCDateStamps)、jmap-clstats、jcmd GC.class-stats
操作系统自带——Linux下面有mpstat、sysstat – iostat、pidstat、prstat、vmstat、dash、CPU – Z、 cacti等;Windows下面有Performance Monitor、Task Manager、Resource Monitor、CPU-Z、cacti等 -
归纳和分析
接下来是归纳和分析环节。
这个时候你已经有了所有需要的信息,你需要辨识出哪些地方需要提升,分析出哪些是潜在需要改进的问题。这个环节可以使用的开源工具有两类:
第三方性能分析工具——Oracle Solaris Studio Performance Analyzer、perftools、PAPI、Code XL、 Dtrace、Oprofile、gprof、LTT
Java 程序层面——Visual VM、Netbeans Profiler、JConsole -
调优
最后一步调优。JVM/GC的调优重点在于要选择对的堆、对的垃圾回收算法。首先正确划分对象的所属年代,然后只对长期存活的对象进行调优,每个虚拟机的所有GC工作线程(GC 的stop-the-world现象),同一个VM中多个 GC 线程来执行;看看压缩普通对象指针是否有效;大的堆也许需要使能AlwaysPretouch并且将UseLargePages设置为最佳大小。此外,在代码层面优化满足SLA目标,设置恰当的ramp-up和ramp-down,对象的年代划分和保留策略(理解LDS文件的形成),确保测量正确。
摘抄自:http://www.infoq.com/cn/news/2016/10/javaPerformance-guide-byMonica