目录
首先说一下结论:通过MAT工具分析才是最精准的,直接通过日志排查可能不是主要原因。
1. 日志分析
直接从日志文件定位 (不精准)
可以看到这是个 OutOfMemoryError
内存溢出异常,Java heap space
表示java堆内存溢出。并且 at org.example.controller.Test.test(Test.java:27)
指定了具体位置,找到具体代码就能定位问题。
上面的方法不一定是精准的,有可能其他地方占用了百分之80内存,刚好一个低内存方法创建对象的时候OOM,所以这种方式存在误判性。
2. MAT 工具
2.1 日志打印方式
通过打印dump文件通过MAT工具查看。
打印dump文件方式有两种,一种是在启动jar包添加 -XX:+HeapDumpOnOutOfMemoryError
(推荐),一种是执行 jmap -dump:live,format=b,file=heapdump.hprof
命令