jstat+gceasy分析應(yīng)用程序資源和性能

Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位于java的bin目錄下,主要利用JVM內(nèi)建的指令對Java應(yīng)用程序的資源和性能進(jìn)行實(shí)時的命令行的監(jiān)控,包括了對Heap size和垃圾回收狀況的監(jiān)控。
使用Jstat查看GC活動
常用命令:jstat -gc -t <pid> <interval> <count>
參數(shù)解釋:
-gc : 表示顯示與垃圾收集相關(guān)的統(tǒng)計信息
-t : 顯示時間戳(從JVM啟動以來的)
<pid>: jvm進(jìn)程Id
<interval>: 間隔多久統(tǒng)計一次(默認(rèn)單位為ms)
<count>:統(tǒng)計多少次結(jié)束
示例:jstat -gc -t 1 1000 5 表示對jvm進(jìn)程Id為1的進(jìn)程,每個1秒統(tǒng)計一次gc信息,統(tǒng)計5次結(jié)束

如何解讀Jstat生成的數(shù)據(jù)
例如:
Timestamp S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT?893677.6??????1024.0??1024.0??320.0???0.0???28160.0???5606.3???142336.0???95712.6?115200.0?110769.0?13056.0?12220.6???1134???27.800???5?????1.502???29.301
| 中文 | 英文 | 值 |
|---|---|---|
| 時間戳記 | Timestamp | = 893677.6秒 |
| 年輕代的容量 | S0C + S1C + EC? | = 1024.0 + 1024.0 + 28160.0? = 30208 kb = 29.5 mb |
| 年輕代利用尺寸 | S0U + S1U + EU | = 320 + 0 + 5606.3 = 5926.3 kb? = 5.78 mb |
| 老年代容量 | OC | =142336.0kb = 139 mb |
| 老年代已用尺寸 | OU | = 95712.6 kb = 93.47mb |
| 元空間容量 | MC | = 115200.0 kb = 112.5 mb |
| 元空間已用的大小 | MU | = 110769.0 kb = 108.17mb |
| Young GC計數(shù) | YGC | = 1134 |
| Young GC花費(fèi)時間 | YGCT | = 27.800秒 |
| FullGC計數(shù) | FGC | = 5 |
| FullGC花費(fèi)時間 | FGCT | = 1.502秒 |
| 在GC中花費(fèi)的總時間 | GCT | = 29.301秒 |
分析jstat輸出的工具
像上面那樣分析jstat的輸出很不方便,太慢了,很多地方需要自己去換算單位去計算,為了方便分析可以使用gc分析工具gceasy

它可以對gc日志進(jìn)行分析,也可以對jstat等jvm命令的輸出進(jìn)行分析,可選擇上傳文件也可以選擇Raw,粘貼文本的方式進(jìn)行分析,點(diǎn)擊Analyze即可。
示例:我這里使用jstat生成30條記錄。
# jstat -gc -t 1 1000 30
然后將以上命令生成的數(shù)據(jù)復(fù)制到gceasy即可進(jìn)行分析即可生成報告
部分報告截圖:





可以看到將各個空間大小,使用率,吞吐率,gc情況等等都統(tǒng)計分析出來了。
這里分析出來的gc時間、吞吐率、空間占用等指標(biāo)要達(dá)到多少才算合格呢?這個和實(shí)際的業(yè)務(wù)需求有很大關(guān)系,有的應(yīng)用吞吐率需要97%以上,有的則95%就滿足了。一般來說,吞吐率應(yīng)該達(dá)到95%以上,gc平均時間應(yīng)該為毫秒級,如果gc平均時間達(dá)到幾秒肯定是不正常了,詳細(xì)可以參考gceasy的關(guān)鍵性能指標(biāo)一文:https://blog.gceasy.io/2016/10/01/garbage-collection-kpi/
