jvm 性能調(diào)優(yōu)工具之 jstat

概述

Jstat是JDK自帶的一個(gè)輕量級(jí)小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位于java的bin目錄下,主要利用JVM內(nèi)建的指令對(duì)Java應(yīng)用程序的資源和性能進(jìn)行實(shí)時(shí)的命令行的監(jiān)控,包括了對(duì)Heap size和垃圾回收狀況的監(jiān)控。

jstat 用法

  • option: 參數(shù)選項(xiàng)
  • -t: 可以在打印的列加上Timestamp列,用于顯示系統(tǒng)運(yùn)行的時(shí)間
  • -h: 可以在周期性數(shù)據(jù)數(shù)據(jù)的時(shí)候,可以在指定輸出多少行以后輸出一次表頭
  • vmid: Virtual Machine ID( 進(jìn)程的 pid)
  • interval: 執(zhí)行每次的間隔時(shí)間,單位為毫秒
  • count: 用于指定輸出多少次記錄,缺省則會(huì)一直打印

option 可以從下面參數(shù)中選擇

  • -class 顯示ClassLoad的相關(guān)信息;
  • -compiler 顯示JIT編譯的相關(guān)信息;
  • -gc 顯示和gc相關(guān)的堆信息;
  • -gccapacity    顯示各個(gè)代的容量以及使用情況;
  • -gcmetacapacity 顯示metaspace的大小
  • -gcnew 顯示新生代信息;
  • -gcnewcapacity 顯示新生代大小和使用情況;
  • -gcold 顯示老年代和永久代的信息;
  • -gcoldcapacity 顯示老年代的大小;
  • -gcutil   顯示垃圾收集信息;
  • -gccause 顯示垃圾回收的相關(guān)信息(通-gcutil),同時(shí)顯示最后一次或當(dāng)前正在發(fā)生的垃圾回收的誘因;
  • -printcompilation 輸出JIT編譯的方法信息;

示例一:-class

顯示加載class的數(shù)量,及所占空間等信息。

jstat -class <pid>
  • Loaded : 已經(jīng)裝載的類的數(shù)量
  • Bytes : 裝載類所占用的字節(jié)數(shù)
  • Unloaded:已經(jīng)卸載類的數(shù)量
  • Bytes:卸載類的字節(jié)數(shù)
  • Time:裝載和卸載類所花費(fèi)的時(shí)間

示例二: -compiler

顯示VM實(shí)時(shí)編譯(JIT)的數(shù)量等信息。

jstat -compiler <pid>
  • Compiled:編譯任務(wù)執(zhí)行數(shù)量
  • Failed:編譯任務(wù)執(zhí)行失敗數(shù)量
  • Invalid :編譯任務(wù)執(zhí)行失效數(shù)量
  • Time :編譯任務(wù)消耗時(shí)間
  • FailedType:最后一個(gè)編譯失敗任務(wù)的類型
  • FailedMethod:最后一個(gè)編譯失敗任務(wù)所在的類及方法

示例三: -gc

顯示gc相關(guān)的堆信息,查看gc的次數(shù),及時(shí)間。

jstat –gc <pid>
  • S0C:年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • S0U :年輕代中第一個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
  • S1U :年輕代中第二個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
  • EC :年輕代中Eden(伊甸園)的容量 (字節(jié))
  • EU :年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
  • OC :Old代的容量 (字節(jié))
  • OU :Old代目前已使用空間 (字節(jié))
  • MC:metaspace(元空間)的容量 (字節(jié))
  • MU:metaspace(元空間)目前已使用空間 (字節(jié))
  • YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • YGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)
  • FGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
  • FGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
  • GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)

示例四: -gccapacity

可以顯示,VM內(nèi)存中三代(young,old,perm)對(duì)象的使用和占用大小

jstat -gccapacity <pid>
  • NGCMN :年輕代(young)中初始化(最小)的大小(字節(jié))
  • NGCMX :年輕代(young)的最大容量 (字節(jié))
  • NGC :年輕代(young)中當(dāng)前的容量 (字節(jié))
  • S0C :年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • S1C : 年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • EC :年輕代中Eden(伊甸園)的容量 (字節(jié))
  • OGCMN :old代中初始化(最小)的大小 (字節(jié))
  • OGCMX :old代的最大容量(字節(jié))
  • OGC:old代當(dāng)前新生成的容量 (字節(jié))
  • OC :Old代的容量 (字節(jié))
  • MCMN:metaspace(元空間)中初始化(最小)的大小 (字節(jié))
  • MCMX :metaspace(元空間)的最大容量 (字節(jié))
  • MC :metaspace(元空間)當(dāng)前新生成的容量 (字節(jié))
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當(dāng)前壓縮類空間大小
  • YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)

示例五:-gcmetacapacity

metaspace 中對(duì)象的信息及其占用量。

jstat -gcmetacapacity<pid>
  • MCMN:最小元數(shù)據(jù)容量
  • MCMX:最大元數(shù)據(jù)容量
  • MC:當(dāng)前元數(shù)據(jù)空間大小
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當(dāng)前壓縮類空間大小
  • YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • FGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
  • FGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
  • GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)

示例六: -gcnew

年輕代對(duì)象的信息。

jstat -gcnew <pid>
  • S0C :年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • S1C :年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • S0U :年輕代中第一個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
  • S1U :年輕代中第二個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
  • TT:持有次數(shù)限制
  • MTT:最大持有次數(shù)限制
  • DSS:期望的幸存區(qū)大小
  • EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
  • EU :年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
  • YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • YGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)

示例七: -gcnewcapacity

年輕代對(duì)象的信息及其占用量

jstat -gcnewcapacity <pid>
  • NGCMN :年輕代(young)中初始化(最小)的大小(字節(jié))
  • NGCMX :年輕代(young)的最大容量 (字節(jié))
  • NGC :年輕代(young)中當(dāng)前的容量 (字節(jié))
  • S0CMX :年輕代中第一個(gè)survivor(幸存區(qū))的最大容量 (字節(jié))
  • S0C :年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • S1CMX :年輕代中第二個(gè)survivor(幸存區(qū))的最大容量 (字節(jié))
  • S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
  • ECMX:年輕代中Eden(伊甸園)的最大容量 (字節(jié))
  • EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
  • YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)

示例八: -gcold

old代對(duì)象的信息

jstat -gcold <pid>
  • MC :metaspace(元空間)的容量 (字節(jié))
  • MU:metaspace(元空間)目前已使用空間 (字節(jié))
  • CCSC:壓縮類空間大小
  • CCSU:壓縮類空間使用大小
  • OC:Old代的容量 (字節(jié))
  • OU:Old代目前已使用空間 (字節(jié))
  • YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
  • FGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
  • GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)

示例九:-gcoldcapacity

old代對(duì)象的信息及其占用量

jstat -gcoldcapacity <pid>
  • OGCMN :old代中初始化(最小)的大小 (字節(jié))
  • OGCMX :old代的最大容量(字節(jié))
  • OGC :old代當(dāng)前新生成的容量 (字節(jié))
  • OC :Old代的容量 (字節(jié))
  • YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • FGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
  • FGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
  • GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)

示例十: - gcutil

統(tǒng)計(jì)gc信息

jstat -gcutil <pid>
  • S0 :年輕代中第一個(gè)survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
  • S1 :年輕代中第二個(gè)survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
  • E :年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比
  • O :old代已使用的占當(dāng)前容量百分比
  • P :perm代已使用的占當(dāng)前容量百分比
  • YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
  • YGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)
  • FGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
  • FGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
  • GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)

示例十一:-gccause

顯示垃圾回收的相關(guān)信息(通-gcutil),同時(shí)顯示最后一次或當(dāng)前正在發(fā)生的垃圾回收的誘因。

jstat -gccause <pid>
  • LGCC:最后一次GC原因
  • GCC:當(dāng)前GC原因(No GC 為當(dāng)前沒有執(zhí)行GC)

示例十二: -printcompilation

當(dāng)前VM執(zhí)行的信息。

jstat -printcompilation <pid>
  • Compiled :編譯任務(wù)的數(shù)目
  • Size :方法生成的字節(jié)碼的大小
  • Type:編譯類型
  • Method:類名和方法名用來標(biāo)識(shí)編譯的方法。類名使用/做為一個(gè)命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項(xiàng)進(jìn)行設(shè)置的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容