【问题标题】:Analyzing gc logs分析 gc 日志
【发布时间】:2015-06-22 08:21:39
【问题描述】:

我正在使用 -XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime 选项来打开 gc 日志记录。

但是发现只有在PrintGCApplicationStoppedTime的4 0r 5打印之后我通过-XX:+PrintGCDetails命令打印的gc日志的实际细节!

根据定义,PrintGCApplicationStoppedTime 打印每次 gc 的应用程序停止时间。

但我不清楚为什么它会像下面显示的示例那样打印。

是因为

PrintGCApplicationStoppedTime 只是在每个安全点到达后打印

(或)

日志文件将由不同的 gc 线程记录。 我对全 GC 使用并发扫描,对年轻一代使用 ParNew

我的应用是网络应用。

O/p 模式——我是这样的:

Application time: 0.3847031 seconds
Total time for which application threads were stopped: 0.3135419 seconds
Application time: 0.1520723 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
1.229: [GC 1.229: [ParNew: 256000K->51200K(256000K), 0.1509756 secs] 426536K->334728K(997376K), 0.1510198 secs] [Times: user=0.85 sys=0.07, real=0.15 secs]

【问题讨论】:

    标签: java garbage-collection jvm jvm-hotspot verbosegc


    【解决方案1】:

    很遗憾,PrintGCApplicationStoppedTime 是这个 JVM 选项的误导性名称。

    事实上,它会打印在安全点内花费的时间。安全点暂停不仅是由于垃圾收集,还有许多其他原因:

    • 去优化
    • 有偏见的锁撤销
    • 线程转储
    • 堆检查
    • 类重定义
    • 等。 (see the list)

    即使没有请求 VM 操作,安全点也可能会定期发生,以便为空闲监视器放气、执行某些 JIT 清理等。 请参阅-XX:GuaranteedSafepointInterval VM 选项(默认为 1000 毫秒)。

    使用-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 转储有关安全点的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多