jvm-jps、jinfo、jstat、jstack、jmap 基本使用

給系統定位問題的時候,知識經驗是基礎,應用數據是依據,工具是手段,在jvm中,咱們常見的數據包括: 運行日誌、堆棧信息、GC信息、線程快照(threaddump/javacode)、堆快照(heapdump/hporf),jdk提供給咱們了很實用的工具來分析,定位解決這些問題,這些工具包含於jdk中,而且以java實現,方便在不一樣的環境中不用安裝其餘依賴庫便可使用,非常方便。下面分別介紹 jps、jinfo、jstat、jstack、jmap,本文使用的jdk版本爲 HopSpot1.8.0_11java


1、jps ( jvm process status tool ) 虛擬機進程工具

配置項 做用
-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


2、jinfo ( configuration info for java ) 顯示虛擬機配置信息

1.經常使用用法函數

  • jinfo pid : 顯示jvm系統屬性與vm參數信息
  • jinfo -flags pid : 顯示jvm vm參數信息,如最大最小堆,默認堆,垃圾收集器參數等
  • jinfo -sysprops pid : 顯示jvm系統屬性
  • jinfo -flag : 顯示特定vm參數值,例如 jinfo -flag MaxHeapSize pid 輸出pid的最大堆內存

2.效果演示工具


3、jstat ( jvm statistics monitoring tool) 收集虛擬機各方面運行數據

一、語法格式
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 pidcode

屬性 釋義
Loaded 裝載總數量
Bytes 裝載總大小
Unloaded 卸載類的數量
Bytes 卸載總大小
Time 加載和卸載類總共的耗時

四、查看GC狀況 jstat -gc pidorm

屬性 釋義
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


4、jmap ( memory map for java ) 虛擬機堆快照工具

一、經常使用用法

  • jmap -heap pid 查看當前jvm heapdump與垃圾收集器的使用狀況

  • jmap -dump:format=b,file=/temp/filename.hprof pid 轉儲堆快照,生成hprof文件到指定路徑

  • jmap -histo pid 列出當前heap中對象情況,附字節碼與java對象映射表


5、jstack ( stack trace for java ) 虛擬機線程快照工具

效果演示:會顯示全部線程的各類信息,能夠用來排查死鎖,或線程長時間停滯的問題...


!!!

相關文章
相關標籤/搜索