性能问答>通过GarbageCollectorMXBean获取到的fgc次数耗时与jstat获取到的不一致>
5回复
2年前

通过GarbageCollectorMXBean获取到的fgc次数耗时与jstat获取到的不一致



如题,这是我的jvm参数

-XX:+UseCompressedOops -Xms5g -Xmx5g -XX:PermSize=256M -XX:MaxPermSize=1024m -XX:NewSize=3g -XX:MaxNewSize=3g -XX:+UseCMSInitiatingOccupancyOnly -XX:+PerfDataSaveToFile -XX:SurvivorRatio=10 -Xloggc:/data/dataLogs/gc/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+HeapDumpOnOutOfMemoryError

jstat采集到的ygc次数与mxbean是一致的,fgc的数量大概是mxbean统计到的两倍,但是不到两倍。
对于耗时,jstat采集到的无论是ygc还是fgc均小于mxbean统计到的数据

6103 阅读
请先登录,再评论

这是因为CMS收集器在MXBean是在每次发生FGC时只会在Sweeping统计一次,而jstat会在InitialMark阶段统计一次,FinalMark阶段统计一次,这样发生一次CMS gc时就会统计两次,所以次数不一致。
gc时间在MXBen中统计的是整个gc从开始到结束时间,jstat统计的是gc在每个阶段实际耗费的时间。
1.png2.png3.png4.png5.png

32年前
回复 Rookie_267692:

那使用其他垃圾收集器会出现类似的情况么

2年前回复

哈哈,再补充一篇R大的文章 😄
jstat显示的full GC次数与CMS周期的关系

12年前

jstat 的数据统计不是来自perfdata的吗?

2年前
回复 西湖の风:

是的

2年前回复