gpt4 book ai didi

java - 启用ZGC时获取 'allocation stall'

转载 作者:行者123 更新时间:2023-12-01 14:27:16 47 4
gpt4 key购买 nike

我正在测试新的 zgc包含在 java 中的垃圾收集器11 因为它 promise 非常低的延迟。我们的应用程序是一个实时服务,每秒创建和销毁许多对象,它使用 akka 在多线程环境中完成。 .

启用时 zgc通过传递选项 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC并启用 gc日志,我们可以在日志中看到很多类似这样的消息:

[2020-05-20T18:05:36.563+0000][63.851s][info ][gc] Allocation Stall (Main-akka.remote.default-remote-dispatcher-6) 11332.231ms
[2020-05-20T18:05:36.563+0000][63.851s][info ][gc] Allocation Stall (Main-akka.remote.default-remote-dispatcher-26) 9898.046ms
[2020-05-20T18:05:36.563+0000][63.851s][info ][gc] Allocation Stall (Main-io-blocking-dispatcher-52) 12133.240ms
[2020-05-20T18:05:36.563+0000][63.851s][info ][gc] Allocation Stall (Main-akka.actor.default-dispatcher-54) 9002.299ms
[2020-05-20T18:05:36.563+0000][63.850s][info ][gc] Allocation Stall (Main-io-blocking-dispatcher-50) 12134.218ms
[2020-05-20T18:05:36.563+0000][63.850s][info ][gc] Allocation Stall (Main-akka.actor.default-dispatcher-46) 12132.540ms
[2020-05-20T18:05:36.563+0000][63.851s][info ][gc] Allocation Stall (Main-akka.actor.default-dispatcher-56) 8072.664ms

几秒钟后,JVM 退出,没有给出任何理由。我们正在运行 openjdk-java-11 .
关于如何完成这项工作的任何建议?

最佳答案

分配停顿意味着一个线程正在请求堆并且没有可用的,因此请求线程正在阻塞。
确保您有足够的 gc 线程设置。 JDK 可能无法检测核心计数,尤其是在使用 Docker 时,gc 线程的默认值源自于此。见 https://wiki.openjdk.java.net/display/zgc/Main#Main-SettingConcurrentGCThreads
如果您的 CPU 利用率在这些时间内很低,这又表明您需要更多的 GC 线程。
一般情况下,启用 hugepages可以帮助 ZGC 提高性能。 https://wiki.openjdk.java.net/display/zgc/Main#Main-EnablingLargePagesOnLinux
此外,您可能只需要更多的堆。
编辑添加 : 确保您使用的是 jdk 和操作系统的最新补丁版本,这可能也是值得的。

关于java - 启用ZGC时获取 'allocation stall',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61923094/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com