内存泄露分析:
想要记录一遍完整的内存泄漏分析
之前浏览器出现过一次线上报警, 报OOM。 后来发现
版本存在堆内存泄露问题,堆内存无法回收,老年代使用99%,导致机器服务不可用
发现GeoResponse 这个类的实例过多, 怀疑是这个天气类导致的内存泄漏 (上午刚刚上线这个)
可以在机器上面简单看一下
jmap -histo 13814 |head -100
后来发现 是天气缓存 问题, 经纬度精度放的太低,貌似是后面6位, 后来缩小成2位, 量就少了
当时使用的一个concurrentHashMap当缓存, 没有设置最大数, 所以并且精度太细了, 没有缓存命中率其实也特别低, 之后map的缓存设置了最大数
jmap -dump:format=b,file=./lw_api.hprof 13814
其实还是需要分析dump文件, 但是dump文件特别大, 有perfma这个在线的工具, 也可以用mat (内存分析工具来看), 设置好内存也挺快的
里面会有内存泄露的猜测, 天气那个是猜对的
线程分析
一般通过top命令看出哪个进程耗费cpu, 然后找到进程, 然后找出线程,
jstack -l 13814 直接grep 线程id
jstack -l 13814 > lw_thread.dump 生成dump文件(文件一般都很小) ,可以使用在线工具分析