?一元镀、 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 是用于見識(shí)虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具载弄。它可以顯示本地或者遠(yuǎn)程虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存撵颊、垃圾收集宇攻、jit編譯等運(yùn)行數(shù)據(jù),它是線上定位jvm性能的首選工具倡勇。
二逞刷、 jstat命令格式
[root@localhost ~]# jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
generalOption : 單個(gè)的常用的命令行選項(xiàng),如-help, -options, 或 -version。
outputOptions : 一個(gè)或多個(gè)輸出選項(xiàng)夸浅,由單個(gè)的statOption選項(xiàng)組成仑最,可以和-t, -h, and -J等選項(xiàng)配合使用。
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:參數(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ì)一直打印
三预皇、jstat參數(shù)選項(xiàng)
[root@localhost ~]# jstat -options
-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編譯的方法信息
參數(shù)名稱 | 參數(shù)說明
---|---|---
class | 用于查看類加載情況的統(tǒng)計(jì),顯示加載class的數(shù)量肝劲,及所占空間等信息迁客。
compiler | 查看HotSpot中即時(shí)編譯器編譯情況的統(tǒng)計(jì)
gc | 查看JVM中堆的垃圾收集情況的統(tǒng)計(jì),可以顯示gc的信息辞槐,查看gc的次數(shù)掷漱,及時(shí)間。其中最后五項(xiàng)榄檬,分別是young gc的次數(shù)卜范,young gc的時(shí)間,full gc的次數(shù)鹿榜,full gc的時(shí)間海雪,gc的總時(shí)間。
gccapacity | 查看新生代舱殿、老生代及持久代的存儲(chǔ)容量情況奥裸,可以顯示,VM內(nèi)存中三代(young,old,perm)對(duì)象的使用和占用大小
gccause | 查看垃圾收集的統(tǒng)計(jì)情況(這個(gè)和-gcutil選項(xiàng)一樣)刺彩,如果有發(fā)生垃圾收集,它還會(huì)顯示最后一次及當(dāng)前正在發(fā)生垃圾收集的原因
gcmetacapacity | 顯示關(guān)于metaspace大小的統(tǒng)計(jì)信息。
gcnew | 查看新生代垃圾收集的情況创倔,new對(duì)象的信息
gcnewcapacity | 用于查看新生代的存儲(chǔ)容量情況知押,new對(duì)象的信息及其占用量
gcold | 用于查看老生代及持久代發(fā)生GC的情況叹螟,old對(duì)象的信息
gcoldcapacity | 用于查看老生代的容量,old對(duì)象的信息及其占用量
gcpermcapacity | 用于查看持久代的容量台盯,perm對(duì)象的信息及其占用量
gcutil | 查看新生代罢绽、老生代及持代垃圾收集的情況
printcompilation | 當(dāng)前VM執(zhí)行的信息
四、 參數(shù)使用實(shí)例
# 在屏幕打印出一次結(jié)果
[root@localhost ~]# jstat -gccause pid
# 不斷的在屏幕打印出結(jié)果
[root@localhost ~]# jstat -gccause pid 1每格1毫秒輸出結(jié)果
[root@localhost ~]# jstat -gccause pid 2000每格2秒輸出結(jié)果
類加載統(tǒng)計(jì) class
[root@localhost ~]# jstat -class 17248?
Loaded? Bytes? Unloaded? Bytes ??? Time ??
? 3356? 7443.8??????? 0 ??? 0.0 ????? 2.20
Loaded:加載class的數(shù)量
Bytes:所占用空間大小
Unloaded:未加載數(shù)量
Bytes:未加載占用空間
Time:時(shí)間
編譯統(tǒng)計(jì) compiler
[root@localhost ~]# jstat -compiler 17248
Compiled Failed Invalid ? Time ? FailedType FailedMethod
??? 2638????? 0 ????? 0 ??? 8.59????????? 0 ?
Compiled:編譯數(shù)量
Failed:失敗數(shù)量
Invalid:不可用數(shù)量
Time:時(shí)間
FailedType:失敗類型
FailedMethod:失敗的方法
編譯統(tǒng)計(jì) compiler
垃圾回收統(tǒng)計(jì) gc
[root@localhost ~]# jstat -gc 17248
?S0C??? S1C??? S0U??? S1U????? EC ????? EU??????? OC ??????? OU ????? MC ??? MU??? CCSC ? CCSU ? YGC ??? YGCT??? FGC??? FGCT ??? GCT ??
12800.0 2560.0? 0.0 ? 2410.5 74240.0? 53184.1 ? 59392.0??? 13256.4 ? 25088.0 24534.7 2560.0 2366.7????? 7??? 0.190 ? 1????? 0.070??? 0.260
S0C:第一個(gè)幸存區(qū)的大小
S1C:第二個(gè)幸存區(qū)的大小
S0U:第一個(gè)幸存區(qū)的使用大小
S1U:第二個(gè)幸存區(qū)的使用大小
EC:伊甸園區(qū)的大小
EU:伊甸園區(qū)的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區(qū)大小
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時(shí)間
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
堆內(nèi)存統(tǒng)計(jì) gccapacity
[root@localhost ~]# jstat -gccapacity 17248
?NGCMN??? NGCMX ??? NGC ??? S0C ? S1C ????? EC????? OGCMN????? OGCMX ????? OGC ??????? OC ????? MCMN ??? MCMX????? MC ??? CCSMN??? CCSMX ??? CCSC??? YGC??? FGC?
?52224.0 839680.0 165376.0 12800.0 2560.0? 74240.0 ? 105472.0? 1679360.0??? 59392.0??? 59392.0????? 0.0 1071104.0? 25088.0????? 0.0 1048576.0 ? 2560.0????? 7 ??? 1
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當(dāng)前新生代容量
S0C:第一個(gè)幸存區(qū)大小
S1C:第二個(gè)幸存區(qū)的大小
EC:伊甸園區(qū)的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:當(dāng)前老年代大小
OC:當(dāng)前老年代大小
MCMN:最小元數(shù)據(jù)容量
MCMX:最大元數(shù)據(jù)容量
MC:當(dāng)前元數(shù)據(jù)空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當(dāng)前壓縮類空間大小
YGC:年輕代gc次數(shù)
FGC:老年代GC次數(shù)
新生代垃圾回收統(tǒng)計(jì) gcnew
[root@localhost ~]# jstat -gcnew 17248
?S0C??? S1C??? S0U??? S1U ? TT MTT? DSS????? EC ????? EU ??? YGC ??? YGCT??
12800.0 2560.0??? 0.0 2410.5? 4? 15 12800.0? 74240.0? 56469.6????? 7??? 0.190
S0C:第一個(gè)幸存區(qū)大小
S1C:第二個(gè)幸存區(qū)的大小
S0U:第一個(gè)幸存區(qū)的使用大小
S1U:第二個(gè)幸存區(qū)的使用大小
TT:對(duì)象在新生代存活的次數(shù)
MTT:對(duì)象在新生代存活的最大次數(shù)
DSS:期望的幸存區(qū)大小
EC:伊甸園區(qū)的大小
EU:伊甸園區(qū)的使用大小
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時(shí)間
新生代內(nèi)存統(tǒng)計(jì) gcnewcapacity
[root@localhost ~]#? jstat -gcnewcapacity 17248
? NGCMN????? NGCMX ????? NGC????? S0CMX ??? S0C ??? S1CMX ??? S1C ????? ECMX??????? EC????? YGC ? FGC?
?? 52224.0 ? 839680.0 ? 165376.0 279552.0? 12800.0 279552.0 ? 2560.0 ? 838656.0??? 74240.0 ??? 7 ??? 1
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當(dāng)前新生代容量
S0CMX:最大幸存1區(qū)大小
S0C:當(dāng)前幸存1區(qū)大小
S1CMX:最大幸存2區(qū)大小
S1C:當(dāng)前幸存2區(qū)大小
ECMX:最大伊甸園區(qū)大小
EC:當(dāng)前伊甸園區(qū)大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代回收次數(shù)
老年代垃圾回收統(tǒng)計(jì) gcold
[root@localhost ~]# jstat -gcold 17248
?? MC ????? MU????? CCSC ??? CCSU ????? OC????????? OU ????? YGC??? FGC??? FGCT ??? GCT ??
?25088.0? 24534.7 ? 2560.0 ? 2366.7 ??? 59392.0 ??? 13256.4????? 7 ??? 1??? 0.070??? 0.260
MC:方法區(qū)大小
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
老年代內(nèi)存統(tǒng)計(jì)
[root@localhost ~]# jstat -gcoldcapacity? 17248
?? OGCMN ????? OGCMX??????? OGC ??????? OC ????? YGC ? FGC??? FGCT ??? GCT ??
?? 105472.0 ? 1679360.0 ??? 59392.0 ??? 59392.0 ??? 7 ??? 1??? 0.070??? 0.260
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:當(dāng)前老年代大小
OC:老年代大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
元數(shù)據(jù)空間統(tǒng)計(jì) gcmetacapacity
[root@localhost ~]# jstat -gcmetacapacity 17248
?? MCMN ????? MCMX??????? MC ????? CCSMN????? CCSMX ????? CCSC ??? YGC ? FGC??? FGCT ??? GCT ??
?????? 0.0? 1071104.0??? 25088.0??????? 0.0? 1048576.0 ??? 2560.0 ??? 7 ??? 1??? 0.070??? 0.260
MCMN: 最小元數(shù)據(jù)容量
MCMX:最大元數(shù)據(jù)容量
MC:當(dāng)前元數(shù)據(jù)空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當(dāng)前壓縮類空間大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
總結(jié)垃圾回收統(tǒng)計(jì) gcutil
[root@localhost ~]# jstat -gcutil 17248
? S0 ??? S1 ??? E????? O????? M ??? CCS??? YGC ??? YGCT??? FGC??? FGCT ??? GCT ??
? 0.00? 94.16? 77.77? 22.32? 97.79? 92.45????? 7??? 0.190 ??? 1??? 0.070??? 0.260
S0:幸存1區(qū)當(dāng)前使用比例
S1:幸存2區(qū)當(dāng)前使用比例
E:伊甸園區(qū)使用比例
O:老年代使用比例
M:元數(shù)據(jù)區(qū)使用比例
CCS:壓縮使用比例
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
JVM編譯方法統(tǒng)計(jì)
[root@localhost ~]# jstat -printcompilation 17248
Compiled? Size? Type Method
??? 2639 ??? 79??? 1 org/apache/juli/AsyncFileHandler$LoggerThread run
Compiled:最近編譯方法的數(shù)量
Size:最近編譯方法的字節(jié)碼數(shù)量
Type:最近編譯方法的編譯類型静盅。
Method:方法名標(biāo)識(shí)良价。
關(guān)于運(yùn)維學(xué)習(xí)、分享蒿叠、交流明垢,筆者開通了微信公眾號(hào)【運(yùn)維貓】,感興趣的朋友可以關(guān)注下市咽,歡迎加入痊银,建立屬于我們自己的小圈子,一起學(xué)運(yùn)維知識(shí)施绎。