1. 程式人生 > >linux jstat 監控 java GC

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 : 最大持有次數限制