如果CPU使用率突然飙升,你会怎么排查?

1.先通过 TOP 命令找到消耗cup很高的进程id ( 按 q 推出监控界面)

top 命令是我们在 Linux 下最常用的命令之一,
它可以实时显示正在执行进程的 CPU 使用率,内存使用率以及系统负载等信息.
其中上半部分显示的是系统的统计信息,下半部分显示的是进程的使用率统计信息.

 

2.执行 top -p {PID} 单独监控该进程[假设PID 是 30199]

top -p 30199

3.在第2步的监控界面输入H ,获取当前进程下的所有线程信息.

 

4.找到消耗 cpu 特别高的线程编号(假设是 30343)  

5.执行jstack 30199 对当前的进程做 dump ,输出所有线程信息, 同时将第4步得到的线程十进制编号 30343 转成 16 进制(7687) , 在堆栈信息里面去找对应线程内容.

 

6.解读线程信息,定位具体代码位置.

PS:这种方式仅仅可以用于了解,但实际项目中却不会这么用,源于它的弊端:

jstack命令会导致JVM停顿‌。
在使用jstack命令时,JVM会让所有线程进入安全点并阻塞,直到jstack操作完成,这会导致JVM停顿。
具体来说,当JVM执行某些特殊操作(如Full GC、jstack、jmap等)时,会让所有线程都进入安全点并阻塞,直到操作完成后线程才能恢复运行‌.

所以在实际项目中你也不太会让项目进行阻塞,然后请求不了.(但是在测试环境中可以)

 

2.利用阿里云的 Arthas 分析火焰图

posted @ 2025-05-07 14:40  忧愁的chafry  阅读(241)  评论(0)    收藏  举报