主要观点总结
本文主要描述了一个关于内存分配问题的排查过程,涉及项目迁移、内存监控、问题定位以及解决方案的探讨。
关键观点总结
关键观点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: 自定义内存分配器的测试
为了验证内存泄漏问题,作者自定义了内存分配器进行测试,发现使用不同的分配器进行扫包操作时,占用的内存存在差异。
文章预览
👉 这是一个或许对你有用 的社群 🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 「 芋道快速开发平台 」 知识星球。 下面是星球提供的部分资料: 《项目实战(视频)》 :从书中学,往事中 “练 ” 《互联网高频面试题》 :面朝简历学习,春暖花开 《架构 x 系统设计》 :摧枯拉朽,掌控面试高频场景题 《精进 Java 学习指南》 :系统学习,互联网主流技术栈 《必读 Java 源码专栏》 :知其然,知其所以然 👉 这是一个或许对你有用的开源项目 国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。 功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能: Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud 视频
………………………………