272 字
1 分钟
内存溢出OOM
内存溢出OutOfMemory
造成的原因
- 一次性申请的太多:更改申请对象数量(例如查询的时候分页)
- 内存资源耗尽未释放:找到未释放的对象进行释放(例如Connection用完就关闭,或者引用池化思想)
- 本身资源不够:
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
jmap -histo:live 24286
可以看正在运行的java进程信息,但在终端显示不是那么直观