当前位置: 首页>后端>正文

缓存,内存泄露问题

内存泄露分析:

想要记录一遍完整的内存泄漏分析

之前浏览器出现过一次线上报警, 报OOM。 后来发现
版本存在堆内存泄露问题,堆内存无法回收,老年代使用99%,导致机器服务不可用

发现GeoResponse 这个类的实例过多, 怀疑是这个天气类导致的内存泄漏 (上午刚刚上线这个)

可以在机器上面简单看一下

jmap -histo 13814 |head -100


缓存,内存泄露问题,第1张

后来发现 是天气缓存 问题, 经纬度精度放的太低,貌似是后面6位, 后来缩小成2位, 量就少了

当时使用的一个concurrentHashMap当缓存, 没有设置最大数, 所以并且精度太细了, 没有缓存命中率其实也特别低, 之后map的缓存设置了最大数

jmap -dump:format=b,file=./lw_api.hprof 13814


缓存,内存泄露问题,第2张

其实还是需要分析dump文件, 但是dump文件特别大, 有perfma这个在线的工具, 也可以用mat (内存分析工具来看), 设置好内存也挺快的

缓存,内存泄露问题,第3张

里面会有内存泄露的猜测, 天气那个是猜对的

线程分析

一般通过top命令看出哪个进程耗费cpu, 然后找到进程, 然后找出线程, 
jstack -l 13814 直接grep 线程id

jstack -l 13814 > lw_thread.dump 生成dump文件(文件一般都很小) ,可以使用在线工具分析

缓存,内存泄露问题,第4张

https://www.xamrdz.com/backend/3ja1925148.html

相关文章: