我的 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 负载来源