首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用ZGC时获取“分配档”

启用ZGC时获取“分配档”
EN

Stack Overflow用户
提问于 2020-05-20 21:19:30
回答 1查看 2K关注 0票数 5

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

当通过传递选项zgc和启用gc日志来启用gc时,我们可以在日志中看到许多类似于此的消息:

代码语言:javascript
复制
[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。对于如何使这项工作奏效有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 21:28:57

分配失速意味着线程请求堆,而没有可用的线程,因此请求线程阻塞。

确保有足够的gc线程设置。如果使用Docker ( gc线程的默认值是从Docker派生的),JDK在检测核心计数时可能会遇到问题。请参阅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和OS的最新补丁版本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61923094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档