服务器CPU负载过高,如何定位问题

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。CPU负载过高解决问题过程:

  1. 使用【top】命令定位异常进程,可发现12836的CPU和内存占用率都非常高
服务器CPU负载过高,如何定位问题_第1张图片
top.png

备注: top 命令默认情况下,是每 3 秒刷新一次。也可以通过 top -d <刷新时间间隔> 来指定刷新频率,如top -d 0.1 或top -d 0.01 等。top 执行时,也可以按“s ”键,修改时间间隔。

  1. 使用【top -H -p 进程号】查看异常线程
服务器CPU负载过高,如何定位问题_第2张图片
top -H -p.png
  1. 使用【printf "%x\n" 线程号】将异常线程号转化为16进制
printf %xn.jpg
  1. 使用【jstack 进程号|grep 16进制异常线程号 -A90】来定位异常代码的位置(最后的-A90是日志行数,也可以输出为文本文件或使用其他数字)。可以看到异常代码的位置。
服务器CPU负载过高,如何定位问题_第3张图片
定位异常代码.png

找到相应代码检查,发现确实有死循环存在。

排查CPU故障的常用命令:

  • top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。
  • PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。
  • jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。
  • pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。

你可能感兴趣的:(服务器CPU负载过高,如何定位问题)