我正在使用GCViewer检查一些GC日志。 (请查看下面的截图)GC日志 - VM操作事件 - 如何跟踪它们
我得到了很多高度暂停(红色矩形),这似乎与“vm操作事件(应用程序停止...)”有关。这些似乎与常规和完整GC停止点不同。
如何才能知道哪些操作正在触发停止事件? (这是否有JVM标志?)
他们不同于垃圾收集?至于GCViewer那张完整的GC暂停+ GC暂停!=总暂停
我正在使用GCViewer检查一些GC日志。 (请查看下面的截图)GC日志 - VM操作事件 - 如何跟踪它们
我得到了很多高度暂停(红色矩形),这似乎与“vm操作事件(应用程序停止...)”有关。这些似乎与常规和完整GC停止点不同。
如何才能知道哪些操作正在触发停止事件? (这是否有JVM标志?)
他们不同于垃圾收集?至于GCViewer那张完整的GC暂停+ GC暂停!=总暂停
添加-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
。
添加-XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1
到你的虚拟机的选择,应该增加关于非GC safepoints的日志信息。
-XX:LogFile=/path/to/file -XX:+LogVMOutput
用于记录到文件。
将这些信息登录到gc.logs?或者是否有将这些日志路由到特定文件的标志? –
@DavidPrzybilla不,我认为他们默认标准输出 – Egwor
他可能已经拥有这些标志,否则日志不会包含VM操作开销时间 – the8472
问题中发布的屏幕截图只显示停止的时间,而不显示为什么他们被阻止了,对吧?我提到的旗帜应该提供比这更多的细节。我链接的帖子也提供了关于VM活动的一些背景信息。 – rinde
不,“PrintGCApplicationStoppedTime”只打印时间量,而不是原因/额外的细节,这可能是GCViewer首先获取信息的原因。查看我的答案,了解提供更多信息的标志。这些也在您链接的文章中提到,但不是在您的答案中。 – the8472