常见命令:
jps [ options ]
:
jinfo [ options ] pid
:
查看Java配置信息
jstat [ options pid ms count]:
虚拟机统计信息监视工具:
- jstat -gc pid 100 20 :每隔100ms,查询一次PID垃圾回收情况,一个执行20次
- jstat -gcutil pid :查看垃圾回收详情
- jstat -gccause pid:查看上一次FGC的原因
jmap [ options ] pid:
- jmap -dump:live,format=b,file=dump.hprof pid: 生成堆快照
- jmap -histo PID:分析JVM中各种对象内存空间占用大小
jstack [ options ] PID
:
堆转储快照分析工具
- jstack -l pid:查看pid的堆栈
jhat
:
堆转储快照分析工具
- jmap -dump:live,format=b,file=dump.hprof PID jmap生成堆快照
- jhat dump.hprof -port 7000
调优的最终目标:
GC的时间足够的小,必须要一个更小的堆
GC的次数足够的少,必须要一个更大的堆
发生Full GC的周期足够的长,
如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。
- 将新对象预留在年轻代
通过设置一个较大的年轻代预留新对象,设置合理的 Survivor 区并且提供 Survivor 区的使用率,可以将年轻对象保存在年轻代。一般来说,Survivor 区的空间不够,或者占用量达到 50%时,就会使对象进入年老代(不管它的年龄有多大),所以 -XX:TargetSurvivorRatio=90,提高 from 区的利用率
生产常用命令:
jsp 查找进程
top -Hp pid 查找最耗费CPU的线程
printf “%x\n” pid 转换成16进制
jstack pid | grep 十六进制的pid
jstat -gc pid 100 20 :每隔100ms,查询一次PID垃圾回收情况,一个执行20次
jstat -gcutil pid :查看垃圾回收详情
jstat -gccause pid:查看上一次FGC的原因
jmap -permstat pid
jmap -heap pid:查看进程堆内存使用情况
jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -dump:format=b,file=文件名称 pid
通过排查工具有:JConsole、VIsualVM,分析dump