我当前运行的应用程序需要最大堆大小为 16GB。
目前我使用以下标志来处理垃圾收集。
-XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=50, -XX\:+DisableExplicitGC, -XX\:+PrintGCDateStamps, -XX\:+PrintGCDetails, -Xloggc\:/home/user/logs/gc.log
但是,我注意到在一些垃圾收集期间,应用程序会锁定几秒钟然后继续 - 这是完全不可接受的,因为它是游戏服务器。
可以找到我的垃圾收集日志的摘录here http://pastebin.com/5kxEmf1d.
任何关于我应该改变什么以减少这些长时间停顿的建议将不胜感激。
任何关于我应该改变什么以减少这些长时间停顿的建议将不胜感激。
CMS GC 很可能无法跟上系统生成的垃圾量。但GC要做的工作实际上是接近一点了与您的系统保留的非垃圾量有关。
So ...
- 尝试减少应用程序的实际内存使用量;例如通过不缓存太多的东西,或者减少你的“世界”的大小。
- 尝试降低应用程序生成垃圾的速度。
- 升级到具有更多内核的计算机,以便在必要时有更多内核可用于运行并行 GC 线程。
致神秘:
是的,事后看来,用 C++ 实现服务器可能会更好。然而,我们对“游戏”一无所知。如果涉及到复杂的世界模型,复杂的异构数据结构,那么用C++实现could意味着您可以将“GC 暂停”问题替换为服务器由于管理数据结构的方式问题而一直崩溃的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)