高并发服务优化篇:详解一次由读写锁引起的内存泄漏
JVM相关的异常,一直是一线研发比较头疼的问题。因为对于业务代码,JVM的运行基本算是黑盒,当异常发生时,较难直观地看到和找到问题所在,这也是我们一直要研究其内部逻辑的原因。
本篇就有一个近期线上JVM内存泄漏的例子,带大家强行分析一波~
Part1线上服务器报警了
某天,同事来找我帮忙,原来是某系统毫无征兆地来了一连串报警,一波机器的老年代内存占用率超过阈值~
1.1先看表现
老年代内存占用
可以看到,在7月中旬之前,内存占用还是比较正常的,每次GC都可以回收掉很大一部分的老年代对象。
而中旬之后,老年代内存一直缓慢增长而无法释放。很明显,应该是对象没法被正常回收导致。
内存泄漏了~
1.2怎么办呢
如果是刚上线的项目爆出了此类问题,因为影响面比较小,可以直接先回滚代码,止血为第一要务。
不过,这个项目明显已经上线N多天,中间还不知道上过多少需求,而且,既然流量近期有上涨导致问题出现,说明,已经对客开流量了。
回滚是不可能了,抓紧时间定位问题,上线修复吧。
Part2定位问题
一般的步骤:
拿到dump文
共有 0 条评论