tomcat线上死循环的排查

一段死循环造成的服务器CUP高负载追溯

  • 事故缘由:
线上服务器近期频繁出现某节点停止服务情况,且出问题的服务器不固定,当时检查发现磁盘被tomcat日志填满,以为是被恶意刷流量,于是删掉了日志,重启了服务解决,当第三次出现该问题时,我开始查找原因。
  • 追溯步骤
tail -f日志,发现大量查询数据库日志不断刷新,但是又没有具体业务代码暴露,考虑某处有死循环。 这里写图片描述 top命令发现java进程占用大量cpu: 这里写图片描述

进程号为10864

top -p 10864 -H 这里写图片描述

找到占用cpu最多的几个线程,分别是10867、10866、13595、13596

  1. jstack 10864 > stack.log,将占用cpu较多的线程号转为16进制,在stack.log中查找。
    这里写图片描述
    10867、10866两线程为gc线程
    进一步找,发现线程13595在为RUNABLE状态,并且在调用数据库,根据堆栈信息,找到了父子关系查询部分自己为自己的父级情况下造成死循环的代码。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值