使用Java层面的工具定位问题及使用系统层面的工具定位堆外内存,排查Spring Boot引起的“堆外内存泄漏”的经验总结

背景

为了更好地实现对项目的管理,我们将组内一个项目,迁移到MDP框架基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。

JVM参数配置是

-XX:MetaspaceSize=256M
-XX:MaxMetaspaceSize=256M
-XX:+AlwaysPreTouch
-XX:ReservedCodeCacheSize=128m
-XX:InitialCodeCacheSize=128m
-Xss512k
-Xmx4g
-Xms4g
-XX:+UseG1GC
-XX:G1HeapRegionSize=4M

实际使用的物理内存如下图所示(top命令显示的内存情况):

你可能感兴趣的:(#,调优,Java,#,springboot,Java层面的工具定位内存区域,系统层面的工具定位堆外内存,gperftools去定位问题,使用strace去追踪系统调用,用GDB去dump可疑内存)