如果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等)时,会让所有线程都进入安全点并阻塞,直到操作完成后线程才能恢复运行.
所以在实际项目中你也不太会让项目进行阻塞,然后请求不了.(但是在测试环境中可以)

浙公网安备 33010602011771号