Java抛出OutOfMemoryError:Java heap space堆内存溢出错误的分析方案
抛出堆内存溢出的错误一定要记得保留现场环境(导出堆内存信息到文件),否则如果无法进行分析,并从根本上解决问题,下次很有可能还会出现。
第一步:导出堆转储文件
我们可以使用Jdk自带的jmap工具。使用命令:jmap -dump:file=DumpFileName.log,format=b pid; DumpFileName.log指的是导出的文件路径,pid指的是抛异常的进程Id。因为文件导出需要一定的时间,这时候如果是生产环境急需恢复正常的话可以在启动进程时在jvm参数上加上-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.log; 这样当该进程溢出时会自动导出堆文件到heap.log
第二步:分析堆文件
这里使用ibm HeapAnalyzer分析堆文件。打开工具后点击File>open选择堆文件或者拖拽堆文件到工具区,找到heap分析区可以看到导出文件那一刻堆内存中的对象占比情况,在结合代码找出内存溢出的原因。