您好,登錄后才能下訂單哦!
概論
命令監控最方便,但是最優的方式是通過工具打開監控:比如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 表示包括線程死鎖的信息
輸出當前應用的線程使用信息,其中包括線程死鎖的相關信息
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。