关于jvm 中vmthread的问题

最近一个同事性能测试,20个并发,压了3分钟,tps急剧下降,jvm开始不响应

通过排查发现,此时old区已满,并且cpu 100%完全被 vmthread占用

如果此时停止施压,那么过几分钟,jvm会回复。

也就是说垃圾回收停滞了。

通过MAT查看heap dump发现,有20多万的hibernate session 产生了超过1G的hashmap
无法回收

也就是在并发的情况,如果短时间产生大量的对象,会导致jvm vmthread出问题

于是采用缓存,减少直接的hibernate调用,症状消失


这使我又联想到之前的一个问题

同事的项目刚上线就出了问题,排查下来看到一个task(一个mq消费进程)一启动就cpu 100%

然后task完全不消费,进程停滞

于是通过jstack看到 vmthread占用了 100% cpu

于是通过jstat 查看垃圾回收时发现heap占用100%

于是检查代码发现,由于多线程的原因,导致并发了加载了字典多次,导致heap 瞬间产生了
很多对象,导致 vm thread工作不正常

修改程序确保只加载一次字典,症状消失

总体来说

cpu 100% 通常的思路是查看runnable的线程,但如果发现是耗尽cpu的是vmthread

多半会伴随old区已满(此时垃圾回收已停止),通常这是由于在并发下短时间内创建很多对象造成。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值