Jvm调优相关
指标
健康GC状况
- YoungGC频率5秒/次
- CMS GC频率不超过1天/次
- 每次YoungGC的时间不超过30ms(有文章:50ms)
- FullGC频率尽可能完全杜绝
- Minor GC执行不频繁,约10秒一次
- Full GC执行时间不到1s
这些指标仅供参考,实际情况应该根据业务情况来进行参考。
GC策略评价指标
吞吐量
应用系统的生命周期内,应用程序所花费的时间和系统总运行时间的比值。
系统总运行时间=应用程序耗时+GC耗时。
如果系统运行了100分钟,GC耗时1分钟,则系统吞吐量=99%垃圾回收器负载
垃圾回收器负载=GC耗时/系统总运行时间
停顿时间
垃圾回收器运行时,应用程序的暂停时间
垃圾回收频率
垃圾回收器多长时间运行一次。一般而言,频率越低越好,通常增大堆空间可以有效降低垃圾回收发生的频率,但是会增加回收时产生的停顿时间。
反应时间
当一个对象成为垃圾后,多长时间内,它所占用的内存空间会被释放掉
方法
查看程序执行时间
ps -p
-o etime
查看程序的GC情况
jstat -gccause
2s 0
这个命令可以观察到以下几个指标:
- GC执行总时间
- young gc执行次数,总时间,频率(time/count)
- full gc事件次数,不同的垃圾回收器指标代表的含义不一样
可通过观察这些指标来决定是否需要调整gc参数
查看Top 20对象
jmap -histo
| head -n20
这个命令执行多次来观察哪个对象的数量或者内存一直在增长
打印线程堆栈
jstack
dump内存
jmap -dump:format=b,file=app.bin
工具
- 5秒钟打印一次堆栈和top对象
1 | #!/bin/bash |
- 分析堆栈和top对象的变化趋势
分析工具
MAT
分析java堆