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

image

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
posted @ 2022-02-08 21:47  Awecoder  阅读(101)  评论(0编辑  收藏  举报