繁体   English   中英

测量GC暂停时间的最佳方法是什么?

[英]What is the best way to measure GC pause times?

跟踪Java实例中GC暂停/停止时间的最佳方法是什么?

  1. 可以从Garbage Collector GarbageCollectorMXBean检索它吗?
  2. 可以从gc.log读取吗?

gc.log是否具有MXBean没有的其他信息? 我希望选择选项1,因为我希望实例向我们的监视系统发出该指标。

我已经通过像几个帖子读对SO,但我似乎并没有越来越正确的答案。 我专门在寻找GC停止时间,而不是在GC上花费的总时间。

垃圾回收并不是JVM停止世界暂停的唯一原因。
您可能还需要数其他原因

监视安全点暂停的第一种方法是解析VM日志:

  • 对于JDK 8和更早版本,请添加-XX:+PrintGCApplicationStoppedTime JVM选项;
  • 从JDK 9开始,添加-Xlog:safepoint

然后在日志文件中查找Total time for which application threads were stopped消息的Total time for which application threads were stopped

第二种方法是使用未记录的 Hotspot内部MXBean:

sun.management.HotspotRuntimeMBean runtime =
        sun.management.ManagementFactoryHelper.getHotspotRuntimeMBean();

System.out.println("Safepoint time:  " + runtime.getTotalSafepointTime() + " ms");
System.out.println("Safepoint count: " + runtime.getSafepointCount());

它为您提供了所有JVM暂停的累积时间。 请参阅此答案中的讨论。

我专门在寻找GC停止时间

失速时间比GC本身多。 获取安全点的时间也是应用程序的停滞状态,并且只能作为部分日志记录来使用,而不能通过MXBeans来获取。

但是,实际上,如果您担心应用程序停顿,那么您实际上应该测量 GC既不暂停也不超过安全点时间。 您应该自己测量档位,例如通过jhiccup

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM