Jvm调优相关

指标

健康GC状况

  1. YoungGC频率5秒/次
  2. CMS GC频率不超过1天/次
  3. 每次YoungGC的时间不超过30ms(有文章:50ms)
  4. FullGC频率尽可能完全杜绝
  5. Minor GC执行不频繁,约10秒一次
  6. Full GC执行时间不到1s

这些指标仅供参考,实际情况应该根据业务情况来进行参考。


GC策略评价指标

  1. 吞吐量

    应用系统的生命周期内,应用程序所花费的时间和系统总运行时间的比值。
    系统总运行时间=应用程序耗时+GC耗时。
    如果系统运行了100分钟,GC耗时1分钟,则系统吞吐量=99%

  2. 垃圾回收器负载

    垃圾回收器负载=GC耗时/系统总运行时间

  3. 停顿时间

    垃圾回收器运行时,应用程序的暂停时间

  4. 垃圾回收频率

    垃圾回收器多长时间运行一次。一般而言,频率越低越好,通常增大堆空间可以有效降低垃圾回收发生的频率,但是会增加回收时产生的停顿时间。

  5. 反应时间

    当一个对象成为垃圾后,多长时间内,它所占用的内存空间会被释放掉


方法

查看程序执行时间

ps -p -o etime

查看程序的GC情况

jstat -gccause 2s 0

这个命令可以观察到以下几个指标:

  1. GC执行总时间
  2. young gc执行次数,总时间,频率(time/count)
  3. full gc事件次数,不同的垃圾回收器指标代表的含义不一样

可通过观察这些指标来决定是否需要调整gc参数

查看Top 20对象

jmap -histo | head -n20

这个命令执行多次来观察哪个对象的数量或者内存一直在增长

打印线程堆栈

jstack

dump内存

jmap -dump:format=b,file=app.bin

工具

  • 5秒钟打印一次堆栈和top对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

pid=$1

mkdir $pid
cd $pid

while [ 1 -gt 0 ]
do
jstack $pid > jstack-`date '+%H-%M-%S'`
jmap -histo $pid | head -n20 > jmap-top-`date '+%H-%M-%S'`

sleep 5
done
  • 分析堆栈和top对象的变化趋势

分析工具

MAT

分析java堆

  1. MAT从入门到精通(一)
  2. MAT从入门到精通(二)
  3. MAT 常用功能

jprofiler

评论