记一次内存泄漏排查

2019-11-16  本文已影响0人  OPice

1、现象

httpclient一直read time out,使用jmx 产看内存是每天都在上升的。

2、保存现场

jstack pid > jstack.log 保存栈日志
jmap -dump:format=b,file=heap.log pid 保存堆日志
一般情况会设置(-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof) 遇到内存溢出会自动生成dump文件

3、止血(如果不需要可先排查问题)

重启应用,恢复服务,先止血。或者不影响服务的话可以直接连上服务器分析,不用分析日志。

4、分析排查

两种方案:

5、定位问题

根据第四步分析出具体oom对象,发现一个connectManager被放到了map中,map的clear是跟httpclient shutDown一块的。但是项目原因,封装的阿里云 apachHttpclient,每次的ak和sk不一样所以每次创建一个新的client,所以map一直在增加没有被释放。

上一篇下一篇

猜你喜欢

热点阅读