jvm 性能調優工具之 jstat 命令詳解


Jstat名稱:Java Virtual Machine statistics monitoring tool

官方文檔:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html

功能描述:

Jstat是JDK自帶的一個輕量級小工具。它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。

命令用法:jstat [-命令選項] [vmid] [間隔時間/毫秒] [查詢次數]
       注意:使用的jdk版本是jdk8。

C:\Users\Administrator>jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.
  • option:參數選項
  • -t:可以在打印的列加上Timestamp列,用於顯示系統運行的時間
  • -h:可以在周期性數據輸出的時候,指定輸出多少行以后輸出一次表頭
  • vmid:Virtual Machine ID( 進程的 pid)
  • interval:執行每次的間隔時間,單位為毫秒
  • count:用於指定輸出多少次記錄,缺省則會一直打印

 

option 可以從下面參數中選擇

C:\Users\Administrator>jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation
jstat -options
  • -class 用於查看類加載情況的統計
  • -compiler 用於查看HotSpot中即時編譯器編譯情況的統計
  • -gc 用於查看JVM中堆的垃圾收集情況的統計
  • -gccapacity 用於查看新生代、老生代及持久代的存儲容量情況
  • -gcmetacapacity 顯示metaspace的大小
  • -gcnew 用於查看新生代垃圾收集的情況
  • -gcnewcapacity 用於查看新生代存儲容量的情況
  • -gcold 用於查看老生代及持久代垃圾收集的情況
  • -gcoldcapacity 用於查看老生代的容量
  • -gcutil 顯示垃圾收集信息
  • -gccause 顯示垃圾回收的相關信息(通-gcutil),同時顯示最后一次僅當前正在發生的垃圾收集的原因
  • -printcompilation 輸出JIT編譯的方法信息

示例:

1.-class 類加載統計

[root@hadoop ~]# jps #先通過jps獲取到java進程號(這里是一個zookeeper進程)
3346 QuorumPeerMain
7063 Jps
[root@hadoop ~]# jstat -class 3346 #統計JVM中加載的類的數量與size
Loaded  Bytes  Unloaded  Bytes     Time   
  1527  2842.7        0     0.0       1.02
  • Loaded:加載類的數量
  • Bytes:加載類的size,單位為Byte
  • Unloaded:卸載類的數目
  • Bytes:卸載類的size,單位為Byte
  • Time:加載與卸載類花費的時間

2.-compiler 編譯統計

[root@hadoop ~]# jstat -compiler 3346 #用於查看HotSpot中即時編譯器編譯情況的統計
Compiled Failed Invalid   Time   FailedType FailedMethod
     404      0       0     0.19          0  
  • Compiled:編譯任務執行數量
  • Failed:編譯任務執行失敗數量
  • Invalid:編譯任務執行失效數量
  • Time:編譯任務消耗時間
  • FailedType:最后一個編譯失敗任務的類型
  • FailedMethod:最后一個編譯失敗任務所在的類及方法

3.-gc 垃圾回收統計

[root@hadoop ~]# jstat -gc 3346 #用於查看JVM中堆的垃圾收集情況的統計
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
128.0  128.0   0.0   128.0   1024.0   919.8    15104.0     2042.4   8448.0 8130.4 1024.0 996.0       7    0.019   0      0.000    0.019
  • S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
  • S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
  • S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
  • EC:年輕代中Eden(伊甸園)的容量 (字節)
  • EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
  • OC:Old代的容量 (字節)
  • OU:Old代目前已使用空間 (字節)
  • MC:metaspace(元空間)的容量 (字節)
  • MU:metaspace(元空間)目前已使用空間 (字節)
  • CCSC:當前壓縮類空間的容量 (字節)
  • CCSU:當前壓縮類空間目前已使用空間 (字節)
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)
  • FGC:從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啟動到采樣時gc用的總時間(s)

4.-gccapacity 堆內存統計

[root@hadoop ~]# jstat -gccapacity 3346 #用於查看新生代、老生代及持久代的存儲容量情況
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
[root@hadoop ~]# jstat -gccapacity -h5 3346 1000 #-h5:每5行顯示一次表頭 1000:每1秒鍾顯示一次,單位為毫秒
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  1280.0  83264.0   1280.0  128.0  128.0   1024.0    15104.0   166592.0    15104.0    15104.0      0.0 1056768.0   8448.0      0.0 1048576.0   1024.0      7     0
  • NGCMN:年輕代(young)中初始化(最小)的大小(字節)
  • NGCMX:年輕代(young)的最大容量 (字節)
  • NGC:年輕代(young)中當前的容量 (字節)
  • S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
  • EC:年輕代中Eden(伊甸園)的容量 (字節)
  • OGCMN:old代中初始化(最小)的大小 (字節)
  • OGCMX:old代的最大容量(字節)
  • OGC:old代當前新生成的容量 (字節)
  • OC:Old代的容量 (字節)
  • MCMN:metaspace(元空間)中初始化(最小)的大小 (字節)
  • MCMX:metaspace(元空間)的最大容量 (字節)
  • MC:metaspace(元空間)當前新生成的容量 (字節)
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • FGC:從應用程序啟動到采樣時old代(全gc)gc次數

5.-gcmetacapacity 元數據空間統計

[root@hadoop ~]# jstat -gcmetacapacity 3346 #顯示元數據空間的大小
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT 
0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
  • MCMN:最小元數據容量
  • MCMX:最大元數據容量
  • MC:當前元數據空間大小
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • FGC:從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啟動到采樣時gc用的總時間(s)

6.-gcnew 新生代垃圾回收統計

[root@hadoop ~]# jstat -gcnew 3346 #用於查看新生代垃圾收集的情況
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 
128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020  
  • S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
  • S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
  • S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
  • TT:持有次數限制
  • MTT:最大持有次數限制
  • DSS:期望的幸存區大小
  • EC:年輕代中Eden(伊甸園)的容量 (字節)
  • EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)

7.-gcnewcapacity 新生代內存統計

[root@hadoop ~]# jstat -gcnewcapacity 3346 #用於查看新生代存儲容量的情況
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 
1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
  • NGCMN:年輕代(young)中初始化(最小)的大小(字節)
  • NGCMX:年輕代(young)的最大容量 (字節)
  • NGC:年輕代(young)中當前的容量 (字節)
  • S0CMX:年輕代中第一個survivor(幸存區)的最大容量 (字節)
  • S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1CMX:年輕代中第二個survivor(幸存區)的最大容量 (字節)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
  • ECMX:年輕代中Eden(伊甸園)的最大容量 (字節)
  • EC:年輕代中Eden(伊甸園)的容量 (字節)
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • FGC:從應用程序啟動到采樣時old代(全gc)gc次數

8.-gcold 老年代垃圾回收統計

[root@hadoop ~]# jstat -gcold 3346 #用於查看老年代及持久代垃圾收集的情況
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 
8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020 
  • MC:metaspace(元空間)的容量 (字節)
  • MU:metaspace(元空間)目前已使用空間 (字節)
  • CCSC:壓縮類空間大小
  • CCSU:壓縮類空間使用大小
  • OC:Old代的容量 (字節)
  • OU:Old代目前已使用空間 (字節)
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • FGC:從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啟動到采樣時gc用的總時間(s)

9.-gcoldcapacity 老年代內存統計

[root@hadoop ~]# jstat -gcoldcapacity 3346 #用於查看老年代的容量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT 
15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
  • OGCMN:old代中初始化(最小)的大小 (字節)
  • OGCMX:old代的最大容量(字節)
  • OGC:old代當前新生成的容量 (字節)
  • OC:Old代的容量 (字節)
  • YGC:從應用程序啟動到采樣時年輕代中gc次數
  • FGC:從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啟動到采樣時gc用的總時間(s)

10.-gcutil 垃圾回收統計

[root@hadoop ~]# jstat -gcutil 3346 #顯示垃圾收集信息
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 
52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020 
  • S0:年輕代中第一個survivor(幸存區)已使用的占當前容量百分比
  • S1:年輕代中第二個survivor(幸存區)已使用的占當前容量百分比
  • E:年輕代中Eden(伊甸園)已使用的占當前容量百分比
  • O:old代已使用的占當前容量百分比
  • M:元數據區已使用的占當前容量百分比
  • CCS:壓縮類空間已使用的占當前容量百分比
  • YGC :從應用程序啟動到采樣時年輕代中gc次數
  • YGCT :從應用程序啟動到采樣時年輕代中gc所用時間(s)
  • FGC :從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT :從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啟動到采樣時gc用的總時間(s)

11.-gccause

[root@hadoop ~]# jstat -gccause 3346 #顯示垃圾回收的相關信息(通-gcutil),同時顯示最后一次或當前正在發生的垃圾回收的誘因
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC 
52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
  • LGCC:最后一次GC原因
  • GCC:當前GC原因(No GC 為當前沒有執行GC)

12.-printcompilation JVM編譯方法統計

[root@hadoop ~]# jstat -printcompilation 3346 #輸出JIT編譯的方法信息
Compiled Size Type Method
421 60 1 sun/nio/ch/Util$2 clear
  • Compiled:編譯任務的數目
  • Size:方法生成的字節碼的大小
  • Type:編譯類型
  • Method:類名和方法名用來標識編譯的方法。類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的

 

遠程監控

與jps一樣,jstat也支持遠程監控,同樣也需要開啟安全授權,方法參照jps。

C:\Users\Administrator>jps 192.168.146.128
3346 QuorumPeerMain
3475 Jstatd
C:\Users\Administrator>jstat -gcutil 3346@192.168.146.128
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
 52.97   0.00  65.15  13.92  97.39  98.02      8    0.020     0    0.000    0.020

 

參考:

https://www.jianshu.com/p/213710fb9e40
https://www.cnblogs.com/lizhonghua34/p/7307139.html
《全棧性能測試修煉寶典-JMeter實戰》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM