生产内存溢出定位分析

生产内存溢出定位分析

具体生产环境大多为linux系统,此处以linux系统为示例。

1.什么是oom?

英文全称“Out Of Memory”,译为 “内存不足” ,错误来源于java.lang.OutOfMemoryError。

看下关于的官方说明:

 Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector

当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error.

2.为什么会OOM?
  • 分配内存参数不合理。

  • 应用太多,或者使用完未释放,导致的内存泄露或者内存溢出。

3.解决方案

针对大部分情况,通常只需要通过 -Xmx 参数调高 JVM 堆内存空间即可。如果仍然没有解决,可以参考以下情况做进一步处理:

1、如果是超大对象,可以检查其合理性,比如是否一次性查询了数据库全部结果,而没有做结果数限制。

2、如果是业务峰值压力,可以考虑添加机器资源,或者做限流降级。

3、如果是内存泄漏,需要找到持有的对象,修改代码设计,比如关闭没有释放的连接。

4.分析步骤

此处针对代码异常导致的内存溢出进行示例分析:

步骤1

切换到jdk安装目录:

/usr/local/jdk/bin
步骤2

使用jmap获取dump.hprof 命令:

./jmap -dump:live,format=b,file= dump.hprof
步骤3

程序启动用户非root用户,使用

sudo -i user ./jmap -dump:live,format=b,file=dump.hprof
步骤4

执行过程中出现is not secure: file should be owned by the current user

原因:无权限,将jmap命令后file文件路径更换为 /tmp/dump.hprof

步骤5

使用**eclipse memory analyzer(MAT)**分析工具载入dump.hprof

步骤6

在这里插入图片描述

步骤7

在这里插入图片描述

步骤8

步骤9

获取到具体类占用内存,然后找到代码进行修改

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值