我正在使用GCViewer检查一些GC日志。 (请查看下面的截图)
我得到了很多高暂停(红色矩形),似乎与“vm操作事件(应用程序停止...)”有关。这些似乎与常规GC和完整GC停止不同。
如何知道触发停止事件的操作是哪些? (这是否有JVM标志?)
它们与垃圾收集不同吗?至于GCViewer完全GC暂停+ GC暂停!=完全暂停
答案 0 :(得分:3)
添加-XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1
将提供有关触发停止事件的操作的信息。
来自:this link
何时使用安全点?
以下是HotSpot JVM启动安全点的几个原因:
- 垃圾收集暂停
- Code deoptimization
- 刷新代码缓存
- 类重新定义(例如热插拔或仪表)
- 偏向锁撤销
- 各种调试操作(例如死锁检查或堆栈跟踪转储)
要将日志写入文件,它取决于您使用的是哪个VM版本。
适用于所有Java版本: Java 8 Docs。
<强> -Xloggc:文件名强>
设置应将重定向的GC事件信息重定向到的文件以进行日志记录。写入此文件的信息类似于
-verbose:gc
的输出,其中包含自每个记录事件之前的第一个GC事件以来经过的时间。如果两者都使用相同的-Xloggc
命令,则-verbose:gc
选项会覆盖java
。
来自Java版本8:
<强> -XX:日志文件=路径强>
设置写入日志数据的路径和文件名。默认情况下,该文件在当前工作目录中创建,名为
hotspot.log
。
答案 1 :(得分:0)
将-XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1
添加到您的VM选项中,该选项应将有关非GC安全点的信息添加到日志中。
-XX:LogFile=/path/to/file -XX:+LogVMOutput
用于记录到文件。