如何定位OOM

造成OOM的原因

在这里插入图片描述

定位OOM

针对第一和第二种情况需要定位OOM,通过dump文件和内存分析根据定位到具体的代码解决。
在这里插入图片描述

(1)系统已经挂了:
通过自动生成的堆dump文件定位。
当JVM发生OOM时,自动生成DUMP文件的参数:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}
例如:生成在相对路径aaa目录下面

java -Xms10M -Xmx10M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./aaa -jar xxx.jar

对生成的dump文件,用JVisualVm工具分析,导入文件,查看于业务相关的对象的实例数,占内存的大小,找到gcroot,查看线程,定位到具体的代码。

(2)系统没有挂:dump文件或者jmap命令分析内存
jmap命令生成dump文件:(注意会造成full gc,导致STW)

jmap -dump:format=b,file=outfile 进程id

可以将进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。JVisualVm.
阿尔萨斯工具(arthas)

打印jvm heap的直方图,但是只答应存活对象的情况,对象的数量、内存大小

jmap -histo:live 进程id

针对第三种情况
运行java程序
java -jar xxx.jar
后台运行
java -jar xxx.jar &
查看进行的内存信息
jmap -heap 进程id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值