4

我是垃圾收集的新手,请有人帮助我得到以下问题的答案并给出明确的解释

我想从不同 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:+PrintGCApplicationStoppedTimeSUN

Q6。我看到一个工具 dyna 跟踪它计算挂起时间并计算 SUN 而不使用标志-XX:+PrintGCApplicationStoppedTime

4

1 回答 1

1

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

-XX:+PrintGCApplicationStoppedTime启用打印应用程序线程因内部 HotSpot VM 操作(GC 和安全点操作)而停止的时间量。

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

于 2013-09-11T19:39:33.890 回答