【记一次线上事故的排查思路】- CPU飙升问题排查

发布时间:2024年01月23日

问题描述

由于项目排期较紧,临时从其他组调来三个开发资源帮我一起做项目,难免上线的时候大家的需求一块上线。
问题来了,上线三天后,线上CPU总是莫名奇妙的突然飙升,飙升后CPU并未降下来,而是一直处在高点。
在这里插入图片描述

问题复现

由于是线上导致的问题,CPU超限后,会自动重启项目,未能保留现场,这样就给排查问题带来了困难。于是,在UAT环境进行压测,看问题出现在哪里。
果不其然,在压测一段时间后,复现了CPU飙升的问题。

查找根因

  1. 在出现问题的服务中通过top 命令查看CPU占用100%的进程号(PID)
  2. top -H -n 1 -p PID 然后通过命令查找对应进程下线程的状态
  3. 通过 jstack -l PID > ./jstack.log 命令输出进程的线程文件
  4. 查看刚输出的jstack.log文件,查看线程详情
  5. 将PID,转成16进制
  6. 查看jstack.log,搜索转成16进制的字符,可以 /+字符串 例如:/4a6 直接向下搜索所在位置,可以看到此线程正在运行中,而且代码行数也标注清楚。

当时没保留每一步的操作截图( ̄▽ ̄)"

第6步有标注出现问题的具体某一行代码,然后进行排查,发现是一段做动态计算的代码,遂进行修改,加上计算时间显示,大于某个时间没计算出来则终止计算。

复测

代码修改完发布到UAT环境再次进行压测,这次不在出现CPU突然飙升的情况,搞定!!!

文章来源:https://blog.csdn.net/nxw_tsp/article/details/135775848
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。