JVM故障运维工具的使用
JVM故障运维工具
1 jps 查看进程pid
jps
2 jmap 查看堆内存
1 用来查看内存信息,实例个数以及占用内存大小
#查看历史生成的实例
jmap -histo <pid> > ./log.txt
#查看当前存活的实例,执行过程中可能会触发一次full gc
jmap -histo:live 24452
2 查看堆的内存使用情况
jmap -heap 24452
3 导出dump文件,使用可视化工具(例如jvisualvm)查看dump文件
jmap -dump:format=b,file=jvm.dump 24452
设置jvm参数,在内存溢出时自动输出dump文件。
# -XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./jvm.dump
3 jstack 查看堆栈信息
1 查看进程中线程状态与堆栈信息。
使用jvisualvm同样可以可视化查看线程dump信息。
jstack <pid>
2 配合使用top+jstack定位CUP使用率过高(有个专门的小节)
使用top找到使用率最高的线程。
# jstack 36032 > 1.txt
# cat 1.txt | grep -A 30 8ccc
4 jinfo 查询运行参数
查看JVM参数
jinfo -flags <pid>
查看java系统参数
jinfo -sysprops 29964
5 jstat 查看堆内存使用情况、gc次数等
查看gc情况
jstat -gc 29964
S0/S1、E、O、M、CCSC分别为survivor区、Eden、老年代、元数据区、压缩类空间(单位KB)。
YGC/FGC:YoungGC/FullGC次数
YGCT/FGCT/GCT:YoungGC/FullGC/总GC耗时(单位S)
观察各区域的变化
jstat -gc pid 1000 10 (每隔1秒执行1次命令,共执行10次)
计算速率
Young GC的平均耗时可以通过 YGCT/YGC 公式算出
Full GC的每次耗时可以用公式 FGCT/FGC 计算得出
在每次gc后eden区使用一般会大幅减少,survivor和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进去老年代大概多少对象,从而可以推算出老年代对象增长速率。
查看jstat所有选项
jstat --help
jstat -options
版权声明:本文为博主原创文章,未经博主允许不得转载。