- 前倾纪要
测试环境测试 发现跑一段时间内存会居高不下 不一会cpu也会爆满。推测是哪里缓存数据出了问题 遂用上了神器‘arthas’
- 解决方法
首先下载就不说了 官网针对不同系统都有 然后我们启动arthas
> 我要测试1 所以输入1
这里启动成功了 目前做的第一步是要观察cpu 与内存的变化 所以输入命令 dashboard
> 这里会列出cpu 及内存的 还有gc的使用情况
观察一阵后发现 gc 会执行 但是一段时间后 及时几个线程一起去gc 内存还是居高不下 说明有强引用占用内存
输入命令"heapdump" 下载文件 并用profilier 打开
> 果然和想的差不多 大量hashMap占用很多内存 继续分析 右击选中并
点击确定会告诉你 这些hashMap是哪里来的
经过层层打开 发现是队列 disreptor 的ringBuffer 持有
打开代码发现ringbufferSize = 10241024
将值修改成2 再次测试问题没有了
原来我们每次会传输500左右的数据 一次占用一个坑位 那么10241024 会循环占用只有下一次数据来了 才会清理上一次的 这样持久下去 内存就会居高不下 所以把这个值适当减小就可以了。
特此记录 不得不感叹 arthas 真好用