給系統定位問題的時候,知識經驗是基礎,應用數據是依據,工具是手段,在jvm中,咱們常見的數據包括: 運行日誌、堆棧信息、GC信息、線程快照(threaddump/javacode)、堆快照(heapdump/hporf),jdk提供給咱們了很實用的工具來分析,定位解決這些問題,這些工具包含於jdk中,而且以java實現,方便在不一樣的環境中不用安裝其餘依賴庫便可使用,非常方便。下面分別介紹 jps、jinfo、jstat、jstack、jmap,本文使用的jdk版本爲 HopSpot1.8.0_11java
配置項 | 做用 |
---|---|
-q | 忽略主類的名稱,只輸出pid |
-m | 輸出啓動類main函數的參數 |
-l | 輸出主類名,若是進程執行的爲jar,則輸出jar路徑 |
-v | 輸出具體進程啓動時jvm參數 |
1.命名格式
jps [options] pid
2.經常使用方式tomcat
jps -lv
: 輸出啓動類名與啓動時jvm參數,能夠方便的看到各個tomcat的自定義參數配置jps -lv |grep project_name
: 在上述基礎上過濾出本身想要查看的項目的信息3.結果展現jvm
1.經常使用用法函數
jinfo pid
: 顯示jvm系統屬性與vm參數信息jinfo -flags pid
: 顯示jvm vm參數信息,如最大最小堆,默認堆,垃圾收集器參數等jinfo -sysprops pid
: 顯示jvm系統屬性jinfo -flag
: 顯示特定vm參數值,例如 jinfo -flag MaxHeapSize pid
輸出pid的最大堆內存2.效果演示工具
一、語法格式
jstat [ option pid [interval[s|ms] [count]]]
說明: interval 表示循環時間間隔,默認單位爲ms,能夠在直接使用s/ms指定單位,如 60ms/1s, count 表示輸出幾回 例:
jstat gc pid 1s 20
: 每1s查詢一次gc狀況,查詢20次 線程
二、option 詳解(主要分三類:類裝載、垃圾收集、運行期編譯情況)日誌
配置項 | 做用 |
---|---|
-class | 監視類裝載、卸載數量、總空間以及類裝載所耗費的時間 |
-gc | 監視Java堆,包括Eden區、兩survivor區、老年代、永久代等的容量、已用空間、GC時間合計等 |
-gccapacity | 與-gc基本相同,但關注點爲Java堆各個區域使用到的最大、最小空間 |
-gcutil | 與-gc基本相同,但關注點爲Java堆各個區域已使用空間佔總空間的百分比 |
-gccause | 與-gcutil功能相同,但會額外輸出致使上一次GC產生的緣由 |
-gcnew | 監控新生代GC狀況 |
-gcnewcapacity | 與-gcnew基本相同,但關注最大,最小空間 |
-gold | 監控老年代GC狀況 |
-goldcapacity | 與-gcold基本相同,但關注最大,最小空間 |
-compiler | 輸出被JIT編譯過的方法、耗時等信息 |
-printcomplilation | 輸出已經被JIT編譯的方法 |
... | ... |
三、查看類裝載卸載狀況 jstat -class pid
code
屬性 | 釋義 |
---|---|
Loaded | 裝載總數量 |
Bytes | 裝載總大小 |
Unloaded | 卸載類的數量 |
Bytes | 卸載總大小 |
Time | 加載和卸載類總共的耗時 |
四、查看GC狀況 jstat -gc pid
orm
屬性 | 釋義 |
---|---|
S0C | 新生代survivor0容量 |
S1C | 新生代survivor1容量 |
S0U | 新生代survivor0已使用大小 |
S1U | 新生代survivor1已使用大小 |
EC | 新生代eden區容量 |
EU | 新生代eden區已使用大小 |
OC | 老年代容量 |
OU | 老年代已使用大小 |
MC | 元數據容量,即方法區容量 |
MU | 元數據已使用空間 |
CCSC | 壓縮類空間大小 |
CCSU | 壓縮類空間使用大小 |
YGC | 新生代gc次數(young gc) |
YGCT | 新生代gc時間(s) |
FGC | 老生代gc次數(full gc) |
GCT | 總的gc時間,包括young gc和full gc |
五、查看GC狀況,以百分比顯示
jstat -gcutil pid
對象
六、查看新生代GC狀況
jstat -gcnew pid
屬性 | 釋義 |
---|---|
S0C | 新生代survivor0容量 |
S1C | 新生代survivor1容量 |
S0U | 新生代survivor0已使用大小 |
S1U | 新生代survivor1已使用大小 |
TT | 對象在新生代存活的次數 |
MTT | 對象在新生代存活的最大次數 |
DSS | 指望的倖存區大小 |
EC | eden區大小 |
EU | eden區已使用大小 |
YGC | young gc次數 |
YGCT | young gc 時間 (秒) |
七、查看老年代GC狀況
jstat -gcold pid
八、查看各空間容量
jstat -gccapacity pid
屬性 | 釋義 |
---|---|
NGCMN | 新生代最小容量 |
NGCMX | 新生代最大容量 |
NGC | 當前新生代容量 |
S0C | survivor0大小 |
S1C | survivor0大小 |
EC | EDEN區大小 |
OGCMN | 老年代最小容量 |
OGCMX | 老年代最大容量 |
OGC | 當前老年代大小 |
MCMN | 元數據最小容量 |
MCMX | 元數據最大容量 |
CCSMN | 最小壓縮類空間大小 |
CCSMX | 最大壓縮類空間大小 |
CCSC | 當前壓縮類空間大小) |
九、查看編譯狀況
jstat -compiler pid
一、經常使用用法
jmap -heap pid
查看當前jvm heapdump與垃圾收集器的使用狀況
jmap -dump:format=b,file=/temp/filename.hprof pid
轉儲堆快照,生成hprof文件到指定路徑
jmap -histo pid
列出當前heap中對象情況,附字節碼與java對象映射表
效果演示:會顯示全部線程的各類信息,能夠用來排查死鎖,或線程長時間停滯的問題...
!!!