jstat+gceasy分析应用程序资源和性能
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
使用Jstat查看GC活动
常用命令:jstat -gc -t <pid> <interval> <count>
参数解释:
-gc : 表示显示与垃圾收集相关的统计信息
-t : 显示时间戳(从JVM启动以来的)
<pid>: jvm进程Id
<interval>: 间隔多久统计一次(默认单位为ms)
<count>:统计多少次结束
示例:jstat -gc -t 1 1000 5 表示对jvm进程Id为1的进程,每个1秒统计一次gc信息,统计5次结束
如何解读Jstat生成的数据
例如:
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计数 | YGC | = 1134 |
Young GC花费时间 | YGCT | = 27.800秒 |
FullGC计数 | FGC | = 5 |
FullGC花费时间 | FGCT | = 1.502秒 |
在GC中花费的总时间 | GCT | = 29.301秒 |
分析jstat输出的工具
像上面那样分析jstat的输出很不方便,太慢了,很多地方需要自己去换算单位去计算,为了方便分析可以使用gc分析工具gceasy
它可以对gc日志进行分析,也可以对jstat等jvm命令的输出进行分析,可选择上传文件也可以选择Raw,粘贴文本的方式进行分析,点击Analyze即可。
示例:我这里使用jstat生成30条记录。
# jstat -gc -t 1 1000 30
然后将以上命令生成的数据复制到gceasy即可进行分析即可生成报告
部分报告截图:
可以看到将各个空间大小,使用率,吞吐率,gc情况等等都统计分析出来了。
这里分析出来的gc时间、吞吐率、空间占用等指标要达到多少才算合格呢?这个和实际的业务需求有很大关系,有的应用吞吐率需要97%以上,有的则95%就满足了。一般来说,吞吐率应该达到95%以上,gc平均时间应该为毫秒级,如果gc平均时间达到几秒肯定是不正常了,详细可以参考gceasy的关键性能指标一文:https://blog.gceasy.io/2016/10/01/garbage-collection-kpi/