Safepoint + stats日志在输出JDK12中使用无vmop操作

问题描述 投票:0回答:1

我在JDK12上运行应用程序,使用-Xlog:safepoint + stats = debug:file = safepoint.log vm参数来记录安全点操作并使用ZGC运行。我有问题要理解日志输出:

[1408.417s][debug][safepoint,stats]           vmop                            [ threads:    total initially_running wait_to_block ][ time:    spin   block    sync cleanup    vmop ] page_trap_count
[1412.164s][debug][safepoint,stats] 1412.162: ZOperation                    [               376                 0             7 ][             0       0       0       0       1 ]               7
[1413.164s][debug][safepoint,stats] 1413.164: None                          [               376                 0             0 ][             0       0       0       0       0 ]               0
[1414.165s][debug][safepoint,stats] 1414.164: None                          [               376                 0             1 ][             0       0       0       0       0 ]               1

我理解第一行告诉ZOperation花了1毫秒,7个线程贡献了阻塞。

我不明白第二行,什么是“无”vmop操作?看起来该操作的持续时间为0.它实际上是0还是0,因为它花了不到1毫秒?如果是,可以设置更高的时间记录粒度,看看它花了多少纳秒?还是微秒?

我每秒都记录了很多“无”操作。我想知道JVM在暂停期间正在做什么。我每隔10秒跟踪ZGC时间和SafePoint时间,聚合安全点时间比聚合gc暂停时间高5倍。我想以某种方式减少我的应用程序的安全点时间。

java jvm zgc
1个回答
3
投票

这是一个没有VM操作的安全点。其目的是执行定期清理任务,例如缩小空闲监视器或清除内联缓存缓冲区,只有在没有运行Java线程时才能安全地完成。

如果要执行清理任务,则每GuaranteedSafepointInterval毫秒都会发生一个强制安全点。默认值为1000.请注意,在您的情况下,no-op安全点恰好在上一个安全点之后1秒发生。

间隔可以调整

-XX:+UnlockDiagnosticVMOptions -XX:GuaranteedSafepointInterval=<ms>

为了避免混淆,在JDK 13中,这样的无操作安全点获得了Cleanup操作名称。

© www.soinside.com 2019 - 2024. All rights reserved.