今天看啥  ›  专栏  ›  Java基基

太坑了!Spring Boot 导致堆外内存泄露了!

Java基基  · 公众号  · 科技自媒体  · 2024-08-28 11:55
    

主要观点总结

本文主要描述了一个关于内存分配问题的排查过程,涉及项目迁移、内存监控、问题定位以及解决方案的探讨。

关键观点总结

关键观点1: 项目迁移与内存问题发现

项目从原来的框架迁移到MDP框架后,出现了Swap区域使用量过高的异常,实际使用的物理内存远高于配置的堆内内存。

关键观点2: 内存排查过程

使用Java层面的工具定位内存区域,通过jcmd和pmap查看内存分布,确定问题可能与Native Code申请的堆外内存有关。

关键观点3: 问题定位

经过一系列排查,问题定位到MCC使用了Reflections进行扫包,底层使用了Spring Boot加载JAR,解压JAR使用Inflater类需要堆外内存。Spring Boot包装的InflaterInputStream没有释放Inflater持有的堆外内存。

关键观点4: 解决方案与探讨

修改MCC的配置路径为特定的JAR包,问题解决。探讨了Spring Boot对堆外内存的处理机制,以及glibc的内存池机制对内存统计的影响。

关键观点5: 自定义内存分配器的测试

为了验证内存泄漏问题,作者自定义了内存分配器进行测试,发现使用不同的分配器进行扫包操作时,占用的内存存在差异。


免责声明

免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
推荐产品:   推荐产品
文章地址: 访问文章快照