记一次日志打印导致 java.lang.OutOfMemoryError: Java heap space 问题

本文记录了一次由于打印大型数组日志导致的Java堆内存溢出错误。通过分析Heap Dump文件,使用JDK自带的VisualVM工具,发现并解决了占用大量内存的Scala代码。删除打印日志的代码后,问题得到解决。后续测试环境出现的内存泄露问题则通过Memory Analyzer工具进行排查。
摘要由CSDN通过智能技术生成

在测试环境中报了 java.lang.OutOfMemoryError: Java heap space 错误,即 Java 堆内存溢出,通过日志没找到具体原因,决定通过分析 Java 内存。

进入该服务的容器后,执行 ps -ef | grep java,可以看到该 Java 服务有这行参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dapeng-container/bin/../logs/20190810105201.hprof

即当 OutOfMemoryError 发生时自动生成 Heap Dump 文件,生成的文件在容器的 /dapeng-container/bin/../logs/20190810105201.hprof。然后我把这个生成的文件下载到本地。

打开 JDK 自带的 jvisualvm.exe 程序,该程序在 JDK 安装目录的 bin 目录下,载入 Heap Dump 文件。点击类,按大小倒序,可以看到下图:
在这里插入图片描述
可以看到 char[] 这个类占用非常大的空间,点进去,看到下图:
在这里插入图片描述
可以看到前面两个实例占用内存很大,然后根据“数组项”的描述,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值