如何从GC日志文件中查找应用程序暂停时间

时间:2013-09-11 13:40:59

标签: garbage-collection jvm

我是垃圾收集的新手,Plz有人帮我解释以下问题并给出清晰的解释

我想从不同JVM的GC日志文件中找到应用程序暂停时间暂停计数

  • SUN
  • JROCKIT
  • IBM

不同版本。

一个。 对于SUN我正在使用JVM选项

-Xloggc:gc.log -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode

B中。 对于JRockit我正在使用JVM选项

-Xms100m -Xmx100m -Xns50m -Xss200k -Xgc:genconpar -Xverbose:gc -Xverboselog:gc_jrockit.log

我的问题

Q1。什么是申请的暂停时间及其发生的原因。

Q2。如何通过查看已发生暂停的日志来说。

Q3。应用程序的暂停时间是否为GC Times的总和。

例如:

  

2013-09-06T23:35:23.382-0700:[GC 150.505:[ParNew   期望幸存者大小50331648字节,新阈值2(最多15)    - 年龄1:28731664字节,总计28731664    - 年龄2:28248376字节,总计56980040   :688128K-> 98304K(688128K),0.2166700秒] 697655K-> 163736K(10387456K), 0.2167900秒] [时间:用户= 0.44 sys = 0.04,实际= 0.22秒]

     

2013-09-06T23:35:28.044-0700:155.167:[GC 155.167:[ParNew]   期望幸存者大小50331648字节,新阈值15(最多15)    - 年龄1:22333512字节,总计22333512    - 年龄2:27468336字节,总计49801848   :688128K-> 71707K(688128K),0.0737140秒] 753560K-> 164731K(10387456K), 0.0738410秒] [时间:用户= 0.30 sys = 0.02,实际= 0.07秒]

suspensionTime = 0.2167900秒+ 0.0738410秒

我。如果是,我需要为每个gc发生添加所有时间

II。如果没有Plz详细解释这些日志,我们会考虑暂停发生,而不考虑不同日期的收集器

Q4。我们可以说GC时间“0.2167900,0.0738410”等于GC暂停即; TotalGCPause = 0.2167900 + 0.0738410

Q5。我们是否可以仅使用上面的标记来计算暂停时间,或者我们需要为SUN添加-XX:+PrintGCApplicationStoppedTime等额外标记

Q6。我看到一个工具dyna跟踪它计算SUN的暂停时间和计数而不使用标志-XX:+PrintGCApplicationStoppedTime

1 个答案:

答案 0 :(得分:1)

如果您想获得有关因GC活动而停止申请的时间的最准确信息,您应该使用-XX:+PrintGCApplicationStoppedTime

由于内部HotSpot VM操作(GC和安全点操作),

-XX:+PrintGCApplicationStoppedTime可以打印应用程序线程已停止的时间。

但是,对于实际日常使用,GC日志提供的信息就足够了。您可以使用问题3中描述的方法来确定GC中花费的时间。