Java应用堆外内存泄露问题排查 | 京东云技术团队

💡 原文中文,约3100字,阅读约需8分钟。
📝

内容提要

最近进行java应用压力测试时发现内存使用率从20%上升到100%,tps从1100多降低到600多。经排查发现是堆外内存泄漏导致的。通过google-perftools工具分析发现是Java_java_util_zip_Inflater_init函数一直在进行内存分配,原因是jimdb客户端使用了gzip解压缩功能,在大并发压测时造成内存泄漏。解决方法是升级jdk版本为jdk7u71,并尽量避免使用jimdb客户端的getObject和setObject方法,或设置解压缩阀值。

🎯

关键要点

  • 在压力测试中,Java应用的内存使用率从20%上升到100%,TPS从1100多降到600多。

  • 经过排查,发现是堆外内存泄漏导致的问题。

  • 使用google-perftools工具分析,发现Java_java_util_zip_Inflater_init函数持续进行内存分配。

  • 问题源于jimdb客户端使用gzip解压缩功能,在高并发情况下造成内存泄漏。

  • 解决方法包括升级JDK版本至jdk7u71,避免使用jimdb客户端的getObject和setObject方法,或设置解压缩阀值。

➡️

继续阅读