linux jstat 監控 java GC
效能測試過程中,我們該如何監控java虛擬機器記憶體的使用情況,用以判斷JVM是否存在記憶體問題呢?如何判斷JVM垃圾回收是否正常?一般的top指令基本上滿足不了這樣的需求,因為它主要監控的是總體的系統資源,很難定位到java應用程式。
在專案實踐過程中,我們探索和使用了一款新工具--Jstat。
Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程式的資源和效能進行實時的命令列的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。
語法結構
jstat命令命令格式:
jstat [Options] vmid [interval] [count]\
引數說明:
Options — 選項,我們一般使用 -gcutil 檢視gc情況
vmid — VM的程序號,即當前執行的java程序號
interval– 間隔時間,單位為秒或者毫秒
count — 列印次數,如果預設則列印無數次
示例:
1、jstat -gc pid
可以顯示gc的資訊,檢視gc的次數,及時間。
其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
2、jstat -gccapacity pid
可以顯示,VM記憶體中三代(young,old,perm)物件的使用和佔用大小,
如:PGCMN顯示的是最小perm的記憶體使用量,PGCMX顯示的是perm的記憶體最大使用量,
PGC是當前新生成的perm記憶體佔用量,PC是但前perm記憶體佔用量。
其他的可以根據這個類推, OC是old內純的佔用量。
3、jstat -gcutil pid
統計gc資訊統計。
4、jstat -gcnew pid
年輕代物件的資訊。
5、jstat -gcnewcapacity pid
年輕代物件的資訊及其佔用量。
6、jstat -gcold pid
old代物件的資訊。
7、stat -gcoldcapacity pid
old代物件的資訊及其佔用量。
8、jstat -gcpermcapacity pid
perm物件的資訊及其佔用量。
9、jstat -class pid
顯示載入class的數量,及所佔空間等資訊。
10、jstat -compiler pid
顯示VM實時編譯的數量等資訊。
11、jstat -printcompilation pid
當前VM執行的資訊。
除了以上一個引數外,還可以同時加上 兩個數字,如:jstat -printcompilation 3024 250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下標題。
結果說明:
S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (位元組)
S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (位元組)
EC:年輕代中Eden(伊甸園)的容量 (位元組)
EU:年輕代中Eden(伊甸園)目前已使用空間 (位元組)
OC:Old代的容量 (位元組)
OU:Old代目前已使用空間 (位元組)
PC:Perm(持久代)的容量 (位元組)
PU:Perm(持久代)目前已使用空間 (位元組)
YGC:從應用程式啟動到取樣時年輕代中gc次數
YGCT:從應用程式啟動到取樣時年輕代中gc所用時間(s)
FGC:從應用程式啟動到取樣時old代(全gc)gc次數
FGCT:從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
GCT:從應用程式啟動到取樣時gc用的總時間(s)
NGCMN:年輕代(young)中初始化(最小)的大小 (位元組)
NGCMX:年輕代(young)的最大容量 (位元組)
NGC:年輕代(young)中當前的容量 (位元組)
OGCMN:old代中初始化(最小)的大小 (位元組)
OGCMX:old代的最大容量 (位元組)
OGC:old代當前新生成的容量 (位元組)
PGCMN:perm代中初始化(最小)的大小 (位元組)
PGCMX:perm代的最大容量 (位元組)
PGC:perm代當前新生成的容量 (位元組)
S0:年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比
S1:年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比
E:年輕代中Eden(伊甸園)已使用的佔當前容量百分比
O:old代已使用的佔當前容量百分比
P:perm代已使用的佔當前容量百分比
S0CMX:年輕代中第一個survivor(倖存區)的最大容量 (位元組)
S1CMX :年輕代中第二個survivor(倖存區)的最大容量 (位元組)
ECMX:年輕代中Eden(伊甸園)的最大容量 (位元組)
DSS:當前需要survivor(倖存區)的容量 (位元組)(Eden區已滿)
TT: 持有次數限制
MTT : 最大持有次數限制