对JVM性能的监控是非常重要的,它可以实时的了解JVM性能消耗情况。
一:垃圾收集
监控JVM的垃圾收集非常重要,因为它对应用的吞吐量和延迟有深刻影响。
Hotspot VM 两种方式查看垃圾回收情况:日志打印(-XX:+printGCDetails )和GUI监控工具。
几乎不会占什么额外的开销。
垃圾收集分为两种:次要垃圾收集(新生代收集 minor gc)和主要垃圾收集(full gc 整个堆)
垃圾收集的数据包括:
- 当前使用的垃圾收集器
- java堆大小
- 新生代和老年代的大小
- 永久代大小
- Minor GC的持续时间,频率,空间回收量
- Full GC的持续时间,频率
- 垃圾收集前后,java堆,新生代,老年代,持久代占用量
- 是否老年代或者永久代的占有触发的full gc
- 应用是否显示调用gc
- 每个并发垃圾收集周期内空间回收量
- 是否显示调用了system.gc()
收集器:parallel scavenge(throughput) (psyougGen)和 cms (ParNew 并行收集器, DefNew,串行收集器)
-verbose:gc 报告垃圾收集信息最常用的命令行选项
Full gc: 重点关注的是垃圾收集之前老年代和永久代的占用量,因为,当老年代或永久代的占用接近容量时,都会触发full gc.
调优情况:当回收的对象比较少,只是浪费cpu。或者对象以不小于cms并行清除垃圾对象速度提升到老年代。
-XX:PrintTenuring-Distribution显示新生代对象年龄的直方图
包含时间戳: -XX:+PrintGCTimeStamps ; -XX:+PrintGCDateStamps
-Xloggc : <filename> 记录gc日志
性能检测工具:gchisto jconsole visualVM visualGC