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

    科技2022-07-14  111

    背景

    为了更好地实现对项目的管理,我们将组内一个项目,迁移到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命令显示的内存情况):

    Processed: 0.015, SQL: 8