服务器CPU突然飙高如何排查?
1、Arthas(阿尔萨斯)–Alibaba 开源的 Java 诊断工具
-
arthas教程:https://arthas.aliyun.com/doc/
-
安装好后:
dashboard指令,可以看到总览信息
thread ,可以看到具体线程信息。如cpu占用高的,阻塞的等 -
如thread -n,找到cpu占用高的前5个线程,基于堆栈信息,能看到是什么业务在处理
2、jstack
(1)top #使用top命令看到cpu最高的进程号
(2)top -Hp 进程pid #查找出哪个线程消耗的cpu最高
(3)printf "%x\n" 线程pid #将线程pid转换为16进制
(4)jstack 进程pid | grep 转换后的16进制 -A 50 #使用此命令后,基本上有问题就可以看出来了,包括代码原因导致的异常显示,或者线程死锁,阻塞等。