一次内存溢出问题分析

    技术2025-07-14  13

    文章目录

    问题描述问题分析1、查看jvm使用情况2、生成dump文件3、利用HeapAnalyzer软件进行分析4、使用eclipse插件分析5、在linux执行分析命令6、分析结果7、问题解决

    问题描述

    打开页面,页面卡死,后台报out of memory错误。

    问题分析

    1、查看jvm使用情况

    命令:jmap -heap [pid]

    发现堆内存的使用率已经达到了100%,总大小8g左右,并且一直不见下降。

    2、生成dump文件

    命令:jmap -dump:file=[] [pid]

    最后生成的文件有7g大小.

    将dump文件下载到本地,利用HeapAnalyzer软件进行分析。

    3、利用HeapAnalyzer软件进行分析

    但因为文件太大,HeapAnalyzer报内存溢出,无法打开。

    4、使用eclipse插件分析

    打开Eclipse - >help - > Eclipse Marketplace,搜索mat:

    最大的对象有5G左

    根据提示安装。

    使用eclipse-File-Open File打开dump文件,依旧报错,无法打开。

    5、在linux执行分析命令

    下载工具:地址:http://www.eclipse.org/mat/downloads.php

    如果下载失败,可以更换镜像来源重试

    下载后将包传到linux服务器上解压。

    在解压后的文件下执行命令:

    ./ParseHeapDump.sh 7.dump org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

    7.dump为上一步生成的dump文件。

    一开始同样报内存溢出的问题,解决方法是打开MemoryAnalyzer.ini文件,修改内存大小(我这里是直接改成了6G)。重新运行上述命令:

    在dump文件目录下会生成3份.zip结尾的报告和一些m.相关的文件,将相关的文件都下载到windows本地磁盘。

    6、分析结果

    解压缩7_System_Overview.zip,打开index.html文件:

    最大的对象有5G左右,推测可能是mybatis缓存的问题。

    7、问题解决

    打开mybatis配置文件,将poolPreparedStatements配置项由true改为false。

    Processed: 0.010, SQL: 9