Jstat是Sun JDK中自帶的監(jiān)控工具,利用了JVM內(nèi)建的指令對Java應(yīng)用程序的資源和性能進(jìn)行實(shí)時的命令行的監(jiān)控,包括了對Heap size和垃圾回收狀況的監(jiān)控等等。JStat是命令行方式運(yùn)行,對系統(tǒng)資源占用很小,在大壓力下很少影響性能。并且運(yùn)行要求低,只要通過Telnet或SSH等方式遠(yuǎn)程登錄到服務(wù)器所在機(jī)器,就可以進(jìn)行監(jiān)控。在與Jmap、JStack等工具結(jié)合使用時非常方便。
使用jstat命令監(jiān)測如下內(nèi)存使用和垃圾回收統(tǒng)計(jì)數(shù)據(jù):
$ <JDK>/bin/jstat –gcutil [-h<lines>] <pid> <interval>
jstat - gcutil選項(xiàng)打印所運(yùn)行應(yīng)用程序進(jìn)程ID <pid>在指定抽樣間隔<interval>下,堆使用及垃圾回收時間摘要,并且每<lines>行顯示一次頭信息。這產(chǎn)生出以下樣例輸出:
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 24.48 46.60 90.24 142 0.530 104 28.739 29.269
0.00 0.00 2.38 51.08 90.24 144 0.536 106 29.280 29.816
0.00 0.00 36.52 51.08 90.24 144 0.536 106 29.280 29.816
0.00 26.62 36.12 51.12 90.24 145 0.538 107 29.552 30.090
一些術(shù)語的中文解釋:
S0C:年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))
S1C:年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))
S0U:年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié))
S1U:年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié))
EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
EU:年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
OC:Old代的容量 (字節(jié))
OU:Old代目前已使用空間 (字節(jié))
PC:Perm(持久代)的容量 (字節(jié))
PU:Perm(持久代)目前已使用空間 (字節(jié))
YGC:從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
YGCT:從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s)
FGC:從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
FGCT:從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT:從應(yīng)用程序啟動到采樣時gc用的總時間(s)
NGCMN:年輕代(young)中初始化(最小)的大小 (字節(jié))
NGCMX:年輕代(young)的最大容量 (字節(jié))
NGC:年輕代(young)中當(dāng)前的容量 (字節(jié))
OGCMN:old代中初始化(最小)的大小 (字節(jié))
OGCMX:old代的最大容量 (字節(jié))
OGC:old代當(dāng)前新生成的容量 (字節(jié))
PGCMN:perm代中初始化(最小)的大小 (字節(jié))
PGCMX:perm代的最大容量 (字節(jié))
PGC:perm代當(dāng)前新生成的容量 (字節(jié))
S0:年輕代中第一個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
S1:年輕代中第二個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
E:年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比
O:old代已使用的占當(dāng)前容量百分比
P:perm代已使用的占當(dāng)前容量百分比
S0CMX:年輕代中第一個survivor(幸存區(qū))的最大容量 (字節(jié))
S1CMX :年輕代中第二個survivor(幸存區(qū))的最大容量 (字節(jié))
ECMX:年輕代中Eden(伊甸園)的最大容量 (字節(jié))
DSS:當(dāng)前需要survivor(幸存區(qū))的容量 (字節(jié))(Eden區(qū)已滿)
TT: 持有次數(shù)限制
MTT : 最大持有次數(shù)限制
如果FGC 過多,有必要調(diào)整下jvm參數(shù)
[root@yy8 bin]# jstat -gcutil 3821 5000 10
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 100.00 95.11 59.02 370 48.495 121 337.359 385.855
0.00 0.00 84.36 99.99 59.03 370 48.495 122 345.393 393.888
0.00 50.37 100.00 99.49 59.03 370 48.495 123 348.494 396.989
0.00 100.00 100.00 56.58 59.03 371 48.496 124 348.494 396.989
0.00 0.00 56.50 96.57 59.02 371 48.496 125 355.148 403.643
0.00 0.00 100.00 96.57 59.02 372 48.496 126 355.148 403.643
0.00 0.00 37.17 90.75 59.02 372 48.496 127 361.721 410.217
0.00 0.00 100.00 90.75 59.02 373 48.496 128 361.721 410.217
5000 是5秒 ,10是10次
參考范例
JAVA_OPTS="-server -Xms4g -Xmx4g -XX:PermSize=96m -XX:MaxPermSize=256m -Xmn2560m -XX:SurvivorRatio=10 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX
:CMSMaxAbortablePrecleanTime=5000 -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80