给祖传系统做了点 GC调优,暂停时间降低了 90% | 京东云技术团队
💡
原文中文,约7600字,阅读约需18分钟。
📝
内容提要
该文章讨论了公司规则引擎系统中的GC问题,通过调整Survivor空间大小来避免晋升年龄阈值的更新,解决了GC长暂停的问题。文章还讨论了动态对象年龄判定机制的合理性,并给出了本地代码模拟问题的示例。
🎯
关键要点
-
公司规则引擎系统在流量切入时偶发长达1-2秒的Young GC暂停。
-
长暂停发生在Young GC阶段,伴随着新生代对象的晋升。
-
核心JVM参数设置较大内存以适应祖传代码的需求。
-
动态对象年龄判定机制导致晋升年龄阈值的更新,影响GC性能。
-
在程序刚启动时,年龄为1的对象容易存活,导致不必要的晋升。
-
解决方案是调整Survivor空间大小,避免晋升年龄阈值的更新。
-
通过设置SurvivorRatio来调整Survivor的比例,从而优化GC性能。
-
晋升操作耗时较长,主要由于涉及跨代复制和指针更新等复杂逻辑。
-
提供了本地代码模拟问题的示例,便于测试和验证。
-
参考文献包括《深入理解JAVA虚拟机》,提供了相关机制的详细解释。
➡️