1. 程式人生 > >JVM系列 實用命令(jmap、jstat、jstack)

JVM系列 實用命令(jmap、jstat、jstack)

時間 log usr 也不能 current 垃圾 gcc 耗時 技術分享

概論
命令監控最方便,但是最優的方式是通過工具打開監控:比如jconsole、jvisualvm,幾乎全部的信息都有了,另外jvisualvm支持遠程監控,但是需要做一些配置
使用命令的目的

獲取垃圾回收器的類型和系統參數 // jmap -heap pid
查看應用啟動的參數// jinfo -flags pid
查看當前各個代區的容量和使用量情況 // jstat
FGC、YGC的總次數和總耗時 // jstat
立即生成Dump文件 //jmap -dump:live,file=dump_001.bin PID
強制FullGC // jmap -dump:live
查看線程的運行信息(包括死鎖的線程) // jstack -l pid

jmap命令

heap pid:查看 JDK的概況的最好的一個參數

JVM主要參數:垃圾回收器的類型、各種ratio、當前實際Size、MaxSize是多少

當前各個代區的使用情況:Eden、From、To、Old區、Perm區

技術分享圖片
技術分享圖片
參數解讀

垃圾回收器: parallel + Concurrent Mark-Sweep
堆區MaxSize是4G,也就是默認是操作系統的1/4,16G*1/4=4G
堆區低於40%,或者大於70% 會自動調整老年代的大小(但是不能低於xms的配置 2G,也不能高於 MaxSize 4G)
Perm區 最大1G ,如我們配置
老年代(concurrent mark-sweep generation)容量:1715.25MB

年輕代:New Generation + 1 Survivor Space= 299.5MB+33.25MB
堆區的當前容量:1715.25+299.5+33.25=2048M

dump:生成快照文件,然後可以利用工具(比如jvisualvm)來分析dump包
dump堆到文件,format指定輸出格式,live指明是活著的對象,file指定文件名

./jmap -dump:live,format=b,file=/usr/developer/huangForBackUp/test20190129.dump 25508

jmap還有一個額外的功能,通過命令觸發FullGC,比如可以執行定時任務,在業務低峰期執行,會自動觸發FullGC

因為在*:live前會進行full gc,如果帶上live則只統計活對象,因此不加live的堆大小要大於加live堆的大小

jmap -histo:live <pid>
jmap -dump:live,file=dump_001.bin PID

jstat命令
gc: 主要查看FGC、YGC的總次數和累計耗時
查看堆內各個代區的當前容量和當前使用量(當前容量不等於MaxCapactiy,當前容量是根據條件動態調整的),因為當前容量不等於Max容量所以在定位問題的時候,沒有太多的使用價值

- S0C : survivor0區的總容量
- S1C : survivor1區的總容量
- S0U : survivor0區已使用的容量
- S1C : survivor1區已使用的容量
- EC : Eden區的總容量
- EU : Eden區已使用的容量
- OC : Old區的總容量
- OU : Old區已使用的容量
- PC 當前perm的容量 (KB)
- PU perm的使用 (KB)
- YGC : 新生代垃圾回收次數
- YGCT : 新生代垃圾回收時間
- FGC : 老年代垃圾回收次數
- FGCT : 老年代垃圾回收時間
- GCT : 垃圾回收總消耗時間

gcutil:功能和gc 一樣,但是是百分比的形式,讀取更友好

gccapacity:讀取各個代區的當前容量、最大容量、當前使用量等信息

NGCMN : 新生代占用的最小空間
NGCMX : 新生代占用的最大空間
OGCMN : 老年代占用的最小空間
OGCMX : 老年代占用的最大空間
OGC:當前年老代的容量 (KB)
OC:當前年老代的空間 (KB)
PGCMN : perm占用的最小空間
PGCMX : perm占用的最大空間

命令的使用:

./jstat -gc 91328
./jstat -gcutil 91328
./jstat -gccapacity 91328

jstack -l pid >> stackLog.log //-l 表示包括線程死鎖的信息
輸出當前應用的線程使用信息,其中包括線程死鎖的相關信息

JVM系列 實用命令(jmap、jstat、jstack)