272 字
1 分钟
内存溢出OOM

内存溢出OutOfMemory#

造成的原因#

  1. 一次性申请的太多:更改申请对象数量(例如查询的时候分页)
  2. 内存资源耗尽未释放:找到未释放的对象进行释放(例如Connection用完就关闭,或者引用池化思想)
  3. 本身资源不够jmap -heap查看堆信息

如何快速定位#

本身资源不够#

[root@centos home]# ls
jvm-demo.jar
[root@centos home]# java -jar jvm-demo.jar &
[1] 24088
[root@centos home]# jmap -heap 24088

jmap -heap查看堆信息

系统已经OOM挂了#

提前设置-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./jvm_logs/

可以在OOM的时候导出一个dump文件到目录jvm_logs中,通过该文件分析OOM的具体代码位置

如果没有设置这个参数可能就无据可查了!如果硬盘够大可以无脑的设置这个参数!

系统运行中还未OOM#

导出dump文件:jmap -dump:format=b,file= 14660

此时会生成一个文件名类似java_pid24232.hprof的文件

使用Java Visual VM工具分析hproof

JavaVisualVM

JavaVisualVM2

jmap -histo:live 24286可以看正在运行的java进程信息,但在终端显示不是那么直观

内存溢出OOM
https://fuwari.vercel.app/posts/oom/
作者
Lettle
发布于
2025-02-15
许可协议
CC BY-NC-SA 4.0