当前位置:网站首页 > 技术博客 > 正文

jvm查看gc情况



Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

img

常用命令: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次结束

img

Jstat生成的数据列解释

Timestamp-自目标JVM启动时间以来的时间(以秒为单位)。

S0C –幸存者0区域的容量,以KB为单位

S1C –幸存者1区域的容量,以KB为单位

S0U –幸存者0区域使用的空间以KB为单位

S1U –幸存者1区域以KB为单位使用空间

EC –伊甸园区的容量(KB)

EU–伊甸园地区的已利用空间(以KB为单位)

OC –老年代区域容量(KB)

OU –老年代区域的已利用空间,以KB为单位

MC –元空间区域容量(KB)

MU –元空间区域以KB为单位的使用空间

CCSC –压缩类空间区域的容量,以KB为单位

CCSU –压缩类空间区域以KB为单位使用空间

YGC –迄今为止发生的年轻GC事件的数量

YGCT –到目前为止,年轻GC花费的时间

FGC –迄今为止已发生的完全GC事件的数量

FGCT –到目前为止已花费的完整GC时间

GCT –到目前为止所花费的GC时间总量(基本上是YGCT + FGCT)

如何解读Jstat生成的数据

例如:

 
  
时间戳记 自JVM启动以来的时间(以秒为单位) = .6秒 年轻一代的容量 青年一代由幸存者0,幸存者1,伊甸园区组成。因此,容量为: 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 = .0 kb = 139 mb 老一代利用尺寸 OU = 95712.6 kb = 93.47mb 元空间容量 MC = .0 kb = 112.5 mb 元空间利用的大小 MU = .0 kb = 108.17mb 年轻GC计数 YGC = 1134 Young GC**花费时间 YGCT = 27.800秒 FullGC计数 FGC = 5 FullGC花费时间 FGCT = 1.502秒 在GC中花费的总时间 GCT = 29.301秒

分析jstat输出的工具

像上面那样分析jstat的输出很不方便,太慢了,很多地方需要自己去换算单位去计算,为了方便分析可以使用gc分析工具:gceasy

img

它可以对gc日志进行分析,也可以对jstat等jvm命令的输出进行分析,可选择上传文件也可以选择Raw,粘贴文本的方式进行分析,点击Analyze即可。

示例:我这里使用jstat生成30条记录。

 
  

然后将以上生成的数据复制到gceasy即可进行分析:

image-20210731225025933

生成报告点击查看

部分报告截图:

image-20210731225101077

image-20210731225106648

image-20210731225112487

image-20210731225117833

image-20210731225122278

可以看到将各个空间大小,使用率,吞吐率,gc情况等等都统计分析出来了。

这里分析出来的gc时间、吞吐量、空间占用等指标要达到多少才算合格呢?这个和实际的业务需求有很大关系,有的应用吞吐量需要97%以上,有的则95%就满足了。一般来说,吞吐量应该达到95%以上,gc平均时间为毫秒级,如果gc平均时间达到几秒肯定是不正常了,详细可以参考gceasy的关键性能指标

版权声明


相关文章:

  • c 数组 指针2025-07-28 19:30:04
  • const与指针的关系2025-07-28 19:30:04
  • java实体类设计技巧2025-07-28 19:30:04
  • 小程序 客服系统2025-07-28 19:30:04
  • 在线代码编写2025-07-28 19:30:04
  • 引用类型与指针类型有什么区别2025-07-28 19:30:04
  • c语言结构体指针定义2025-07-28 19:30:04
  • c语言pthread线程池2025-07-28 19:30:04
  • js中如何给数组添加数据2025-07-28 19:30:04
  • 线程之间如何进行通信2025-07-28 19:30:04