如何记录每个进程的 CPU 使用率?

age*_*ser 18 linux logging central-processing-unit process

我在 Linode 上有一个盒子正在经历奇怪的行为。CPU 和磁盘 I/O 会时不时地达到 100%,并且服务器变得无响应并且必须启动。我想更好地调查发生了什么,但我不知道如何找到谁对所有 CPU 和 I/O 负责。我正在运行 Gentoo 2.6.18。

sha*_*awn 21

你可以尝试做这样的事情:

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done

这将向您显示 CPU 使用率排名前十的进程。您可以通过将“head -10”中的 10 更改为不同的数字来更改显示的进程数,以及通过更改“sleep 3”中的 3 或完全取出“sleep 3”部分来更改它的更新频率。

  • 确保你在那里有一些睡眠,否则你的 shell 进程很有可能总是排在前 10 名。:) (5认同)
  • 顺便说一句,你应该给这个进程最高优先级,因为它在高负载的高峰期仍然有用(毕竟这是它的生命周期)。 (3认同)
  • 请注意,“ps -eo pcpu”打印进程的“生命周期”CPU 使用情况,而不是过去 X 秒的平均值。因此,这对于跟踪进程随时间的使用情况或查找长期进程的 CPU 使用率通常为 0% 但偶尔会消耗所有可用 CPU 的情况没有用。 (3认同)

Sco*_*ttZ 12

看看上面它会写一个你可能想要的几乎所有东西的二进制日志,然后你可以使用像 gui 这样的 top 来浏览一天的时间片(默认是每 5 分钟获取一次数据)。http://www.atcomputing.nl/Tools/atop/


Ali*_*ani 6

我认为munin是一种有用的监控工具,可以帮助您获取有关您的盒子活动的一些信息。此外,还有一些命令行工具,如sar、 iostat 、 ps 、 top 用于此类用途。


小智 5

其他答案仅向您展示了如何查看当前发生的情况,如果系统已重新启动,则无济于事。

如果您希望为后代记录此信息(或计费,或您可能还有的任何其他用途),您需要的是流程会计。

这是我找到的一个 HOWTO,但老实说——我已经有十年没有使用流程会计了。

http://tldp.org/HOWTO/Process-Accounting/