JVM問題常用排查命令
@Date 2017.05.23
JVM調優問題
- CPU使用率與Load值偏大 : Thread count以及GC count
- 關鍵接口響應時間很慢 : GC time以及GC log中的STW的時間
- 發生Full GC或者Old CMS GC非常頻繁 : 內存泄露
jps
# -m:輸出main method的參數
# -l:輸出完全的包名,應用主類名,jar的完全路徑名
# -v:輸出jvm參數
# -V:輸出通過flag文件傳遞到JVM中的參數(.hotspotrc文件或-XX:Flags=所指定的文件
jps -mlvV
jstack
# 線程的堆棧跟蹤,可以得知哪些線程被阻塞或正等待,以便於查找如線程死鎖的原因
jstack pid
# -m:打印java和native frames
jstack -m pid
jinfo
# 查看應用啓動啓動參數
jinfo -flag pid
jmap
# 查看堆的情況
jmap -heap pid
# dump內存二進制信息(dump時系統會被短暫暫停FULL GC)
# live子選項:只輸出活的對象
jmap -dump:live,format=b,file=/home/admin/heap.bin pid
jmap -dump:format=b,file=/home/admin/heap.bin pid
# 堆佔用情況
jmap -histo pid | head -10
jstat
# 查看GC情況
# S0 -Heap上的Survivor space 0區已使用空間的百分比
# S1 -Heap上的Survivor space 1區已使用空間的百分比
# E -Heap上Eden space區已使用空間的百分比
# O -Heap上的Old space區已使用空間的百分比
# P -Perm space區已使用空間的百分比
# YGC -從應用程序啓動到採樣時發生Yang GC 的次數
# YGCT -從應用程序啓動到採樣時Yang GC所用的時間【單位秒】
# FGC -從應用程序啓動到採樣時Full GC的次數
# FGCT -從應用程序啓動到採樣時Full GC所用的時間
# GCT -從應用程序啓動到採樣時用於垃圾回收的總時間【單位秒】
jstat -gcutil pid 1000