概論
命令監(jiān)控最方便耘擂,但是最優(yōu)的方式是通過工具打開監(jiān)控:比如jconsole胆剧、jvisualvm,幾乎全部的信息都有了醉冤,另外jvisualvm支持遠(yuǎn)程監(jiān)控秩霍,但是需要做一些配置篙悯。
但是實(shí)際生產(chǎn)上還是用 JRE的居多,并沒有那么多花里胡哨的功能铃绒,而且即便是JDK鸽照,linux上也是執(zhí)行不了那么多 exe文件的,但是可以查一些命令匿垄。
另外spring cloud actutor有監(jiān)控jvm的功能,可以在admin的控制臺(tái)查看實(shí)時(shí)的jvm運(yùn)行情況
使用命令的目的
- 獲取垃圾回收器的類型和系統(tǒng)參數(shù) // jmap -heap pid
- 查看應(yīng)用啟動(dòng)的參數(shù)// jinfo -flags pid
- 查看當(dāng)前各個(gè)代區(qū)的容量和使用量情況 // jstat
- FGC归粉、YGC的總次數(shù)和總耗時(shí) // jstat
- 立即生成Dump文件 //jmap -dump:live,file=dump_001.bin PID
- 強(qiáng)制FullGC // jmap -dump:live
- 查看線程的運(yùn)行信息(包括死鎖的線程) // jstack -l pid
jmap命令
- heap pid:查看 JDK的概況的最好的一個(gè)參數(shù)
- JVM主要參數(shù):垃圾回收器的類型椿疗、各種ratio、當(dāng)前實(shí)際Size糠悼、MaxSize是多少
-
當(dāng)前各個(gè)代區(qū)的使用情況:Eden届榄、From、To倔喂、Old區(qū)铝条、Perm區(qū)
參數(shù)解讀
- 垃圾回收器: parallel + Concurrent Mark-Sweep
- 堆區(qū)MaxSize是4G,也就是默認(rèn)是操作系統(tǒng)的1/4,16G*1/4=4G
- 堆區(qū)低于40%席噩,或者大于70% 會(huì)自動(dòng)調(diào)整老年代的大邪噻帧(但是不能低于xms的配置 2G,也不能高于 MaxSize 4G)
- Perm區(qū) 最大1G 悼枢,如我們配置
- 老年代(concurrent mark-sweep generation)容量:1715.25MB
- 年輕代:New Generation + 1 Survivor Space= 299.5MB+33.25MB
- 堆區(qū)的當(dāng)前容量:1715.25+299.5+33.25=2048M
- dump:生成快照文件埠忘,然后可以利用工具(比如jvisualvm)來分析dump包
dump堆到文件,format指定輸出格式,live指明是活著的對(duì)象,file指定文件名
./jmap -dump:live,format=b,file=/usr/developer/huangForBackUp/test20190129.dump 25508
- jmap還有一個(gè)額外的功能馒索,通過命令觸發(fā)FullGC莹妒,比如可以執(zhí)行定時(shí)任務(wù),在業(yè)務(wù)低峰期執(zhí)行绰上,會(huì)自動(dòng)觸發(fā)FullGC
因?yàn)樵?:live前會(huì)進(jìn)行full gc旨怠,如果帶上live則只統(tǒng)計(jì)活對(duì)象,因此不加live的堆大小要大于加live堆的大小
jmap -histo:live <pid>
jmap -dump:live,file=dump_001.bin PID
jstat命令
- gc: 主要查看FGC蜈块、YGC的總次數(shù)和累計(jì)耗時(shí)
- 查看堆內(nèi)各個(gè)代區(qū)的當(dāng)前容量和當(dāng)前使用量(當(dāng)前容量不等于MaxCapactiy鉴腻,當(dāng)前容量是根據(jù)條件動(dòng)態(tài)調(diào)整的),因?yàn)楫?dāng)前容量不等于Max容量所以在定位問題的時(shí)候百揭,沒有太多的使用價(jià)值
- S0C : survivor0區(qū)的總?cè)萘?- S1C : survivor1區(qū)的總?cè)萘?- S0U : survivor0區(qū)已使用的容量
- S1C : survivor1區(qū)已使用的容量
- EC : Eden區(qū)的總?cè)萘?- EU : Eden區(qū)已使用的容量
- OC : Old區(qū)的總?cè)萘?- OU : Old區(qū)已使用的容量
- PC 當(dāng)前perm的容量 (KB)
- PU perm的使用 (KB)
- YGC : 新生代垃圾回收次數(shù)
- YGCT : 新生代垃圾回收時(shí)間
- FGC : 老年代垃圾回收次數(shù)
- FGCT : 老年代垃圾回收時(shí)間
- GCT : 垃圾回收總消耗時(shí)間
gcutil:功能和gc 一樣拘哨,但是是百分比的形式,讀取更友好
gccapacity:讀取各個(gè)代區(qū)的當(dāng)前容量信峻、最大容量倦青、當(dāng)前使用量等信息
NGCMN : 新生代占用的最小空間
NGCMX : 新生代占用的最大空間
OGCMN : 老年代占用的最小空間
OGCMX : 老年代占用的最大空間
OGC:當(dāng)前年老代的容量 (KB)
OC:當(dāng)前年老代的空間 (KB)
PGCMN : perm占用的最小空間
PGCMX : perm占用的最大空間
命令的使用:
./jstat -gc 91328
./jstat -gcutil 91328
./jstat -gccapacity 91328
jstack 線程監(jiān)控
詳細(xì)的使用和線程dump文件分析博客
http://www.hollischuang.com/archives/110
jstack -l pid >> stackLog.log //-l 表示包括線程死鎖的信息
輸出當(dāng)前應(yīng)用的線程使用信息,其中包括線程死鎖的相關(guān)信息