记一次通过arthas+profilier解决队列内存爆炸问题

  • 前倾纪要

测试环境测试 发现跑一段时间内存会居高不下 不一会cpu也会爆满。推测是哪里缓存数据出了问题 遂用上了神器‘arthas’

  • 解决方法

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

特此记录 不得不感叹 arthas 真好用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值