【发布时间】:2013-09-11 13:40:59
【问题描述】:
我是垃圾收集的新手,请有人帮助我得到以下问题的答案并给出明确的解释
我想从不同 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时间之和。
例如:
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 字节,总共 49801848 : 688128K->71707K(688128K), 0.0737140 secs] 753560K->164731K(10387456K), 0.0738410 secs] [Times: user=0.30 sys=0.02, real=0.07 secs]
suspensionTime = 0.2167900 秒 + 0.0738410 秒
我。如果是,我是否需要为每次 gc 发生添加所有时间
二。如果没有请您详细解释那些我们认为发生了暂停的日志,而那些不考虑不同收集器的日志
Q4.我们可以说 GC 时间“0.2167900 , 0.0738410”等于 GC Pauses ie;TotalGCPause = 0.2167900 + 0.0738410
Q5.我们是否可以仅使用上述标志来计算暂停时间,或者我们需要包含额外的标志,例如 -XX:+PrintGCApplicationStoppedTime 代表 SUN
Q6. 我看到一个工具 dyna 跟踪它计算挂起时间和计数 SUN 而不使用标志 -XX:+PrintGCApplicationStoppedTime
【问题讨论】: