OOM排查
一,原因
1.一次性申请对象太多,创建了大量对象,尤其从表中读取了大量数据,循环中大量创建对象,放入list中。方案:限量
2.内存资源耗尽为释放,如connction,线程。方案:池化/及时释放
3.堆空间分配过小,尤其存在大对象。方案,调整内存
二,排查
查看进程ID
ps -ef|grep app.jar
ps -ef|grep java
或jps
查看堆内存分配情况
jmap -heap PID
导出dump文件
jmap -dump:format=b,file=/path/to/dumpfile.hprof PID
其中 /path/to/dumpfile.hprof 是 dump 文件保存的路径,PID 是进程的 ID。
分析工具
命令窗口 ter
jvisualvm
dumpfile.hprof
找到量大的类
点击进入,找对应代码
具体是找三角形标记的内容,即垃圾回收根节点
右击,选择在线程中显示
https://zhuanlan.zhihu.com/p/633610222
https://cloud.tencent.com/developer/article/1703140?from=15425
如果没有导出dump,如何在服务器直接查看对象,不过太多了,上面的就被覆盖了
jmap -histo:live 21
jvisualvm
1,载入
2,找大实例
3,代码定位
找三角形-垃圾回收节点对应的元素,右击选择,在线程中显示