线上内存溢出问题排查<实践篇> 转

线上内存溢出问题排查<实践篇>  转
一、概述
之前写过 《性能的一些常用的命令与注意点、《java jvm内存结构(回顾) 《

JVM内存回收机制及回收器-一目了然 等篇文章今天写下实践吧,比较简单。 也正好前几天出现一个内存的问题。

二、线上准备数据

线上服务器跑得好好,突然服务不可用了,怎么办?
1、登陆服务器,立马从LB拉下。
2、快速jps,jstat -gcutil 12345看下。
3、如果是内存溢出再down(jmap -dump:live,format=b,file=heap.bin 32471)出堆分析,同时打出线程栈。
4、重启。
5、拉上f5。
当然事先配置一些参数,让系统出现内存溢出的时候自动打出堆栈(-XX:+HeapDumpOnOutOfMemoryError),也是非常好的办法。
 
     如果是整个集群出现问题,那把别的机器全部重启,留一台分析。如果实在不行,那就只能回滚代码了。
【ps:如果是内存出现问题,一般很少直接挂掉,回收线程还在做最后的挣扎,cpu利用率也非常高。整个load也上去了。整个jvm就会挂在哪里,一动不动了。 估计也不会自动打出堆栈了,还得手工上弄啊。】

三、线下分析
我一般使用mat( http://www.eclipse.org/mat/)(mat的堆开大点,默认的会内存溢出的)分析堆:
此是此次故障down下来的 用mat分析的 图形。
 
     再从 Dominator tree进去,发现
 
     展开后:发现是此线程持有的一些数据:再从数据中寻找 是什么原因引起的。(一般都能查到问题的)
可以看到整个对象的具体数值:
 
四、最后
    分析好原因后,该干嘛就干嘛吧! 基本是代码写的不好、一些接口没有做幂等控制的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值