利用性能测试排查服务线上内存占用过高的问题续篇

问题:服务器内存占用率居高不下
线索:ImportCheckFailedEntity存活的实例数高(导入文件用到),TreeMap、ReentrantLock存活的实例数高(excel导入组件用到)
原因:
1、线程池线程中ThreadLocal存放的数据内存泄露。由于线程池中线程的生命很长,在线程池的线程中使用ThreadLocal必需要调用其clear方法清空TreadLocal中的数据释放内存;
2、Excel导入组件中的OPCPackage用完需调用close方法释放读写锁锁定的数据
涉及范围:
1、使用poi导入excel文件的功能(包括实时的或者异步的)
2、使用了TreadLocal的导入文件的功能(批处理异步导入的都用了)
修复后压测效果:对导入接口压测10分钟后,抓取堆内存信息分析,无excel数据对象信息。压测过程中内存增幅极小、增涨趋势平滑缓慢(说明能被ygc回收)
我挑了一个导入功能做测试,其它导入功能优化方法相同。

jstate -gcutil pid 1000 100 #jstat抓取gc信息,每隔1秒打印一次,打印100次
jstack pid jstack #抓取进程线程信息
jmap -heap pid #查看堆内存分配信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值