我是垃圾收集的新手,Plz有人帮我解释以下问题并给出清晰的解释
我想从不同JVM的GC日志文件中找到应用程序暂停时间和暂停计数:
不同版本。
一个。 对于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
答案 0 :(得分:1)
如果您想获得有关因GC活动而停止申请的时间的最准确信息,您应该使用-XX:+PrintGCApplicationStoppedTime
。
-XX:+PrintGCApplicationStoppedTime
可以打印应用程序线程已停止的时间。
但是,对于实际日常使用,GC日志提供的信息就足够了。您可以使用问题3中描述的方法来确定GC中花费的时间。