裂开,JVM疯狂GC导致CPU飙高

线上服务器频繁出现CPU高负载问题,重启Tomcat后恢复正常。通过排查,怀疑是代码中的定时任务或死循环引起,但日志未显示异常。通过jvm分析,发现大量线程GC活动,特别是httpProxy_jsp线程活跃。最终发现同事编写的HTTP请求工具类中,未设置超时时间,导致请求长时间等待,引发JVM频繁GC,CPU飙升。设置超时限制后问题解决。总结经验:JVM问题复杂,需结合多种方式分析;避免引入未经验证的自创代码。
摘要由CSDN通过智能技术生成

背景

线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会出现同样的问题。解决问题首先要找到问题的爆发点,对于偶现的问题是非常难于定位的。

重启服务器之后只能等待问题再次出现,这时候首先怀疑是否某个定时任务引发大量计算或者某个请求引发了死循环,所以先把代码里面所有怀疑的地方分析了一遍,加了一点日志,结果第二天下午问题再次出现,

这次的策略是首先保护案发现场,因为线上是两个点,把一个点重启恢复之后把另一个点只下线不重启保留犯罪现场。

排查

在问题的服务器上首先看业务日志,没有发现大量重复日志,初步排除死循环的可能,接下来只能分析jvm了。

第一步:top命令查看占用CPU的pid

记一次JVM疯狂GC导致CPU飙高的问题解决

 

这是事后的截图,当时的cpu飙高到500多,pid是27683

然后ps aux | grep 27683 搜索一下确认一下是不是我们的tomcat占用的cpu,这个基本是可以肯定的,因为tomcat重启之后CPU立马就降下来了。

也可以使用jps显示java的pid

第二步:top -H -p 27683 查找27683下面的线程id,显示线程的cpu的占用时间,占用比例,发现有很多个线程都会CPU占用很高,只能每个排查。

第三步:jstack查看线程信息,命令:jstack

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值