推荐一款神器,助你秒级定位线上问题!
背景
经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。
尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一通手忙脚乱,定位过程百转千回。
对此,也有不少同学曾经整理过相关流程或方法论,类似把大象放进冰箱要几步
传统的方案一般是4步
-
1. top oder by with P:1040 // 首先按进程负载排序找到 axLoad(pid)
-
2. top -Hp 进程PID:1073 // 找到相关负载 线程PID
-
3. printf “0x%x\n”线程PID: 0x431 // 将线程PID转换为 16进制,为后面查找 jstack 日志做准备
-
4. jstack 进程PID | vim +/十六进制线程PID - // 例如:jstack 1040|vim +/0x431 -
但是对于线上问题定位来说,分秒必争,上面的 4 步还是太繁琐耗时了,有没有可能封装成为一个工具,在有问题的时候一键定位,秒级找到有问题的代码行呢?
当然可以!
工具链的成熟与否不仅体现了一个开发者的运维能力,也体现了开发者的效率意识。
淘宝的oldratlee 同学就将上面的流程封装为了一个工具:
show-busy-java-threads.sh
https://github.com/oldratlee/useful-scripts
可以很方便的定位线上的这类问题,下面我会举两个例子来看实际的效果。
快速安装使用:
-
source <(curl -fsSL https://raw.githubusercontent.com/oldratlee/useful-scripts/master/test-cases/self-installer.sh)参考:https://blog.csdn.net/qq_42046105/article/details/115343601