【记一次线上事故的排查思路】- CPU飙升问题排查
发布时间:2024年01月23日
问题描述
由于项目排期较紧,临时从其他组调来三个开发资源帮我一起做项目,难免上线的时候大家的需求一块上线。
问题来了,上线三天后,线上CPU总是莫名奇妙的突然飙升,飙升后CPU并未降下来,而是一直处在高点。
问题复现
由于是线上导致的问题,CPU超限后,会自动重启项目,未能保留现场,这样就给排查问题带来了困难。于是,在UAT环境进行压测,看问题出现在哪里。
果不其然,在压测一段时间后,复现了CPU飙升的问题。
查找根因
- 在出现问题的服务中通过top 命令查看CPU占用100%的进程号(PID)
- top -H -n 1 -p PID 然后通过命令查找对应进程下线程的状态
- 通过 jstack -l PID > ./jstack.log 命令输出进程的线程文件
- 查看刚输出的jstack.log文件,查看线程详情
- 将PID,转成16进制
- 查看jstack.log,搜索转成16进制的字符,可以 /+字符串 例如:/4a6 直接向下搜索所在位置,可以看到此线程正在运行中,而且代码行数也标注清楚。
当时没保留每一步的操作截图( ̄▽ ̄)"
第6步有标注出现问题的具体某一行代码,然后进行排查,发现是一段做动态计算的代码,遂进行修改,加上计算时间显示,大于某个时间没计算出来则终止计算。
复测
代码修改完发布到UAT环境再次进行压测,这次不在出现CPU突然飙升的情况,搞定!!!
文章来源:https://blog.csdn.net/nxw_tsp/article/details/135775848
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!