内存溢出

86 阅读1分钟

内存溢出 Java heap space 解决分析

项目背景

springboot项目发生了 java.lang.OutOfMemoryError: Java heap space

采取措施

1、在项目启动时,增加参数

java -jar -Xms128m -Xmx128m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:\log demo.jar

模拟崩溃

## 代码的某个片段中,植入一段死循环代码

List<String> list=new ArrayList<>();
while (true){
    list.add("AAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}

启动后,启动程序时,会进行内存异常,然后会把log日志文件,丢入到此目录中 image.png

使用工具分析

使用Jdk自带的 Java VisualVM 进行分析

文件载入后,直接看概要,可以快速分析问题发生点

image.png

点击看详情,可以发现,在某个控制器中,在添加List时出错了 image.png

使用重量级 jprofiler 监测工具进行监测

下载地址:www.ej-technologies.com/download/jp…

先根据内存大小进行排序,然后选出内存占用最大的 image.png

找出来元素后,在图表中显示 image.png

根据图表,找出泄露语句 image.png