【问题标题】:how to avoid GC pauses?如何避免 GC 暂停?
【发布时间】:2016-12-18 12:07:21
【问题描述】:

我们的应用程序对延迟至关重要。为了减少 GC 暂停,我们重用对象。在这个过程的开始,我们分配了很多小对象,然后(几乎)没有分配内存。但是,我仍然看到以下 gc 日志:

2016-12-18T13:51:48.650+0200: 1.085: Total time for which application threads were stopped: 0.0001411 seconds, Stopping threads took: 0.0000203 seconds
2016-12-18T13:51:48.776+0200: 1.210: Total time for which application threads were stopped: 0.0002027 seconds, Stopping threads took: 0.0000183 seconds
2016-12-18T13:51:48.894+0200: 1.328: Total time for which application threads were stopped: 0.0002559 seconds, Stopping threads took: 0.0000194 seconds
2016-12-18T13:51:48.906+0200: 1.341: Total time for which application threads were stopped: 0.0002159 seconds, Stopping threads took: 0.0000199 seconds
2016-12-18T13:51:49.047+0200: 1.482: Total time for which application threads were stopped: 0.0002842 seconds, Stopping threads took: 0.0000208 seconds

据我了解,JVM 停止进程以运行所有引用并标记对象。这是对的吗?

我还看到此类日志的频率随着时间的推移而减少。所以我认为 GC 调整了一些内部参数,我希望一开始就提供它们。现在我使用以下参数运行进程:

-Xms10240m
-Xmx10240m
-server
-XX:+UseG1GC
-noclassgc

所有与详细 GC 相关的其余参数。我们的机器有足够的内存可以完全避免 gc。我如何向java解释它?

操作系统:Linux,JVM,oracle 或 openJDK。

谢谢。

【问题讨论】:

  • 0.0002842 秒太长??
  • 280 家工厂,对我们来说太长了。
  • 0.0002842 秒不是 280 毫秒。它是 280 微秒,也就是 0.28 毫秒。
  • 哦!你是对的,对不起。 280 micro 要好得多,但我们更愿意完全禁用它。
  • G1GC 收集器持续运行这些微收集以防止长时间的 GC 运行。如果你禁用这些,它最终会耗尽内存并且必须运行完整的 GC,这将是 long 和 10 Gb 堆 (相对而言,例如几秒甚至几分钟)。当它发生时,你肯定会感觉到那种,而且它最终会出乎意料地发生。这些微收集正是您在延迟关键系统中想要的,因为 10 多秒的 GC 运行会杀死您。

标签: java garbage-collection jvm


【解决方案1】:

这些不一定是垃圾回收。

当 JVM 打印 Total time for which application threads were stopped 时,还有许多其他情况(与 GC 无关)。详情请见the related answer

由于类加载和重新编译,非 GC 安全点在应用程序启动时尤其频繁。

如果您想跟踪 GC 暂停,请使用 -XX:+PrintGCDetails

更新

减少非 GC 安全点数量的一些技巧:

  • -XX:-UseBiasedLocking 完全禁用偏见撤销暂停;
  • -XX:+UnlockDiagnosticVMOptions -XX:GuaranteedSafepointInterval=0 每秒禁用一个强制安全点;
  • -XX:-TieredCompilation 禁用多层编译,从而减少重新编译相关安全点的数量。

注意:这只是一个提示,而不是生产使用的建议。上述选项可能会对性能产生副作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多