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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章