记一次懵比的Tomcat进程CPU使用率100%


问题描述

前几天线上服务器某个Tomcat进程突然间歇性CPU占用率100%,这个并不是突然性的,而是有规律的,Top了一下基本每隔30s飙升一次,坐等5s左右回落。虽然这酱紫,由于是多核CPU,外加其实并没有多少真实用户在访问,也并不影响什么。

解决思路

由于是间隔性的飙升,首先检查了一下Tomcat服务下是否存在高频计算的定时任务,然并卵,连个定时任务都没有。

这就奇了怪了,推测是不是某个服务有定时统计的请求,由于项目中使用了Dubbo,但是也并没有嵌入统计配置,此路不通。

既然这样不妨分析一下到底是Tomcat进程中的那个线程导致CPU飙升的。首先使用Top命令找到CPU飙升的进程PID,然后执行以下命令,查找导致问题的线程。

#8564为进程号PID
top -H -p 8564

等待一段时间,找出CPU飙升的线程ID,然后转十六进制

#172为线程ID
printf %x 2212

然后执行以下命令,定位CPU飙升的线程堆栈信息

jstack 8564|grep -A 10 8a4

格式:jstack [进程] | grep -A 10 [线程的16进制]
,-A 10表示查找到所在行的后10行。

1.png

2.png

来回定位就这俩,一个是Tomcat自身相关的,一个是监控的应该不是这个问题。分析了半天,也没个结果,临近下班了,再等几分钟重启试试,看明天是否还有这个问题。

3.jpg

第二天,上线Top监控了一下,半天也没反应,难道好了?又等了半天,还是没动静,果然好了,这件事说明一个问题,如果实在找不到原因所在,就重启吧!!!

qrcode_for_gh_bf7a27ade681_258.jpg

作者: 小柒

出处: https://blog.52itstyle.com

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。