主要观点:Java 是广泛用于构建和运行应用的语言之一,组织重视测量其性能。在多 NUMA 内存节点上运行 Java 应用时要注意远程访问,libnuma 内核库提供多种策略可优化应用利用服务器节点。当前 JDK 内存分配策略存在问题,如使用 localalloc 时内存会交错导致性能下降,通过检查 CPU 和内存节点的对齐情况提出解决方案,禁用不正确节点对齐时的 UseNUMA 标志,并测试了不同情况下的效果,应用补丁后在 2 节点系统及更高节点系统上性能有显著提升,JDK25 起在内存和 CPU 未对齐时会禁用 UseNUMA 标志。
关键信息:
- Java 应用在多 NUMA 节点运行需注意远程访问及相关策略。
- JDK 内存分配策略问题及解决方案,如 localalloc 导致性能下降及禁用 UseNUMA 条件。
- 测试不同情况下 UseNUMA 标志的启用和禁用及预期结果。
- 应用补丁后的性能提升数据,如不同 GC 类型下的性能提升百分比。
重要细节: - localalloc 可在当前节点内存不足时在其他 NUMA 节点分配内存,membind 限制分配到绑定节点。
- 测试命令及不同参数组合,如 numactl 相关命令及 Java 启动参数。
- 性能提升数据,如 ParallelGC、G1GC、ZGC 类型下的服务器端 Java 吞吐量提升百分比。
- 相关参考资料链接,如 set_mempolicy 和 numactl 的 man 页面。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。