时间:2021-05-19
前言
最近遇到一个java应用造成了服务器CPU使用率过高,最后查询,问题是因为在tomcat下重新部署应用的时候没有kill掉tomcat进程,造成应用中的数据库连接池进程中的锁不能被释放,死循环造成了cpu使用率过高的现象,详细原因就不做详细分析了,主要分享一下问题排查的过程。
使用top命令查询服务cpu使用情况
服务器资源使用率
可以看到31737这个进程的CPU使用率巨大
使用top -Hp 31737查询31737进程中各个线程的资源使用率
使用top -Hp 31737查询31737进程中各个线程的资源使用率
31737进程中各个线程的使用率
由于当时的截图丢失了,简单说一下,使用top -Hp 31737命令查询到31737进程中,一个线程id为5322占用CPU过高
使用printf "%x\n" 5322把线程id转化为十六进制
因为打印线程栈的时候,本地线程标识nid是用十六进制表示的,使用该命令把线程id转化为十六进制
5322的十六进制为14ca
使用jstack命令打印堆栈信息
使用jstack 31737 | grep -10 14ca打印31737的堆栈信息,并查找本地线程标识为14ca的线程堆栈信息
31737的堆栈信息
如图,线程的状态为TIMED_WAITING,对象等待中,查看源码
出现问题的代码
发现问题的原因就不做详细分析了,这里主要是分享一下问题排查的过程
度娘一下有个大神回答的不错,连接在这里,有兴趣的可以自己去看一下https://stackoverflow.com/questions/6981564/why-must-the-jdbc-driver-be-put-in-tomcat-home-lib-folder/7198049#7198049
大神的回答
大致原因就是因为在tomcat下重新部署应用的时候没有kill掉tomcat进程,造成应用中的数据库连接池进程中的锁不能被释放
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.在一次周末收到部门的反馈,线上机器java进程的cpu会频繁100%监控系统发了很多报警邮件,于是登录跳板机进行排查解决2.使用top命令查看进程情况发现每
问题,打一个页面cpu暴涨,打开一次就涨100%,一会系统就卡的不行了。排查方法,因为是线上的linux,没有用jvm监控工具rim链接上去。只好用命令排查:t
之前在的书中看到有关控制任务管理器中CPU占用率的文章。感觉很意思。一直想自己做一次。但我在C语言方面的水平有限。因此不能直接用找到代码实践这个过程。不过最近经
电脑开机几分钟就关机的原因: 1、硬件故障:CPU风扇或者显卡风扇的灰尘太多而导致无法散热,或者风扇轴承损坏,转速过低,从而造成开机几分钟之后,电脑因温度过高
背景最近在一次线上作业过程中执行了一句DML语句,本以为万无一失,结果应用反馈说没有更新,数据还是没有变,最后经过排查才发现是我语句写错了,导致update语句