2016-01-14 105 views
2

我正在使用GCViewer检查一些GC日志。 (请查看下面的截图)GC日志 - VM操作事件 - 如何跟踪它们

我得到了很多高度暂停(红色矩形),这似乎与“vm操作事件(应用程序停止...)”有关。这些似乎与常规和完整GC停止点不同。

  • 如何才能知道哪些操作正在触发停止事件? (这是否有JVM标志?)

  • 他们不同于垃圾收集?至于GCViewer那张完整的GC暂停+ GC暂停!=总暂停

enter image description here

回答

3

添加-XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1将提供有关触发停止事件的操作的信息。

来源:this link

当使用safepoints?

下面是几个原因的HotSpot JVM启动还原点:

  • 垃圾收集暂停
  • 代码去优化
  • 法拉盛代码缓存
  • 类重定义(如热插拔或仪器)
  • 偏置锁定撤销
  • 各种调试操作(例如死锁检查或堆栈跟踪转储)

对于日志写入文件,这取决于您所使用的虚拟机版本。

对于所有Java版本:Java 8 Docs

-Xloggc:文件名

设置到详细GC事件的信息应该被重定向日志记录文件。写入此文件的信息与自012CD的输出与从每个记录的事件之前的第一个GC事件起经过的时间类似。如果两个命令都使用相同的java命令给出,则-Xloggc选项将覆盖-verbose:gc

从Java版本8:

-XX:日志文件路径=

设置在那里的日志数据写入的路径和文件名。默认情况下,该文件是在当前工作目录中创建的,并且其名称为hotspot.log

+0

他可能已经拥有这些标志,否则日志不会包含VM操作开销时间 – the8472

+0

问题中发布的屏幕截图只显示停止的时间,而不显示为什么他们被阻止了,对吧?我提到的旗帜应该提供比这更多的细节。我链接的帖子也提供了关于VM活动的一些背景信息。 – rinde

+0

不,“PrintGCApplicationStoppedTime”只打印时间量,而不是原因/额外的细节,这可能是GCViewer首先获取信息的原因。查看我的答案,了解提供更多信息的标志。这些也在您链接的文章中提到,但不是在您的答案中。 – the8472

0

添加-XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1到你的虚拟机的选择,应该增加关于非GC safepoints的日志信息。

-XX:LogFile=/path/to/file -XX:+LogVMOutput用于记录到文件。

+0

将这些信息登录到gc.logs?或者是否有将这些日志路由到特定文件的标志? –

+0

@DavidPrzybilla不,我认为他们默认标准输出 – Egwor