Java的性能分析

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

猜你喜欢

转载自wenluoxicheng.iteye.com/blog/2329527