长GC暂停应用程序

Gon*_*ler 6 java performance garbage-collection

我目前正在运行一个需要最大堆大小为16GB的应用程序.

目前我使用以下标志来处理垃圾收集.

-XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=50, -XX\:+DisableExplicitGC, -XX\:+PrintGCDateStamps, -XX\:+PrintGCDetails, -Xloggc\:/home/user/logs/gc.log
Run Code Online (Sandbox Code Playgroud)

但是,我注意到在一些垃圾收集期间,应用程序会锁定几秒钟然后继续 - 这是完全不可接受的,因为它是一个游戏服务器.

我的垃圾收集日志可以在这里找到.

关于我应该改变什么以减少这些长时间停顿的任何建议将不胜感激.

Ste*_*n C 5

任何关于我应该改变什么以减少这些长时间停顿的建议将不胜感激。

CMS GC 有可能跟不上系统生成的垃圾量。但是 GC 必须执行的工作实际上与您的系统保留的非垃圾数量更密切相关。

所以 ...

  • 尝试减少应用程序的实际内存使用量;例如,不要缓存太多东西,或者减少“世界”的大小。
  • 尝试降低应用程序生成垃圾的速度。
  • 升级到具有更多内核的机器,以便在必要时有更多内核可用于运行并行 GC 线程。

神秘:

事后看来,用 C++ 实现服务器可能会更好。然而,我们对“游戏”一无所知。如果它涉及具有复杂异构数据结构的复杂世界模型,那么用 C++ 实现它可能意味着您将“GC 暂停”问题替换为服务器由于管理数据的方式问题而一直崩溃的问题结构。

  • 啊...所以基本上,你的问题是关于如何调整 Minecraft。根本不是真正的编程问题。我想你会在 Minecraft 论坛上得到更好的答案。 (3认同)