如何找出哪个进程导致 CPU 使用率过高?

如何找出哪个进程导致 CPU 使用率过高?

我的 Solaris 虚拟机上发生了一个奇怪的问题:启动并运行 1-2 小时后,CPU 使用率将在 5 秒内上升到 100%,然后再下降到正常 5 秒,并重复此过程直到重新启动 - 这使我的 Solaris 虚拟机完全无法使用。

我希望找出重复 5 秒 CPU 使用率 100% 期间发生的情况,但系统在这 5 秒内完全没有响应 - 甚至没有处理鼠标/键盘中断,因此我无法使用top或查看进程名称prstat

所以我想知道:

  • 导致 CPU 使用率 100% 的进程 ID
  • 在 CPU 使用率达到 100% 时该进程在做什么

请提出您的建议,谢谢!

答案1

您可以尝试以批处理模式运行 top:

top -b -n100 > top.log

其中 -n100 代表 100 次迭代。

另一种方法是使用带有适当参数的 ps(这些参数来自 Linux,您可能需要查阅 Solaris 中 ps 的手册页)。为方便起见,该命令嵌入到 Bash 脚本中。

   #!/bin/bash 
   while true ; do
      ps -eo pcpu,pmem,pid,ppid,args >> process.log
      sleep 1
   done

您可能还需要使用该nice命令将进程活动日志记录进程的优先级更改为实时。

答案2

特别是当您在虚拟化环境中运行时,您不应直接假设罪魁祸首是一个进程。

这也可能是虚拟机管理程序问题或内核相关问题。

我将使用 dtrace 来找出内核在这些高 CPU 使用率期间正在做什么:

DTraceToolkit处理器时间modcalls.d命令将是一个很好的开始。

如果你的主机操作系统也是 Solaris,那么 dtrace 也可以用来识别 CPU 负载来源

相关内容