我是垃圾收集的新手,请有人帮助我得到以下问题的答案并给出明确的解释
我想从不同 JVM 的 GC 日志文件中找到应用程序暂停时间和暂停计数:
- 太阳
- jRockit
- IBM
的不同版本。
A.对于 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 secs] 697655K->163736K(10387456K), 0.2167900 secs ] [Times: user=0.44 sys=0.04, real=0.22 secs]
2013-09-06T23:35:28.044-0700:155.167:[GC 155.167:[ParNew 期望幸存者大小 50331648 字节,新阈值 15(最大 15)-年龄 1:22333512 字节,总计 22333512 -年龄 2:27468336 字节,4988总计:688128K->71707K(688128K),0.0737140 秒] 753560K->164731K(10387456K),0.0738410 秒] [时间:用户=0.30 系统=0.02,实际=0.07 秒]
暂停时间 = 0.2167900 秒 + 0.0738410 秒
一世。如果是,我是否需要为每次 gc 发生添加所有时间
ii. 如果没有请您详细解释那些我们认为发生了暂停的日志,而那些不考虑不同收集器的日志
Q4。我们可以说 GC 时间 "0.2167900 , 0.0738410" 等于 GC Pauses 即;TotalGCPause = 0.2167900 + 0.0738410
Q5。我们是否可以仅使用上述标志来计算暂停时间,或者我们需要包括额外的标志,例如 -XX:+PrintGCApplicationStoppedTime
SUN
Q6。我看到一个工具 dyna 跟踪它计算挂起时间并计算 SUN 而不使用标志-XX:+PrintGCApplicationStoppedTime