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

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

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

答案1

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

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”部分来更改更新频率。

答案2

检查一下,它将写入几乎所有您可能需要的二进制日志,然后您可以使用类似 gui 的顶部来浏览一天的时间片(默认每 5 分钟获取一次数据)。http://www.atcomputing.nl/Tools/atop/

答案3

我觉得穆宁是监控的好工具之一,可以帮助您获取有关您的盒子活动的信息。此外,还有一些命令行工具,如特区、iostat、ps、top等用法。

答案4

接受的答案按进程生命周期 CPU 使用率排序,而不是短期 CPU 使用率。

top您可以使用批处理模式获取任意时间间隔内 CPU 使用率排名前十的进程:

$ top -b -n 1 -d 3 -o +%CPU | sed -e '1,/PID/d' | head -10

这里-d 3指定间隔。根据 Ubuntu 21.10 的手册页,支持 0.1 秒倍数的间隔。如果您指定更精确的值,它不会抱怨,但我不知道它是否真的在更短的时间内进行测量。

sed -e '1,/PID/d'只是切断了摘要信息和标题 - 但您可能希望保留它并head相应地增加限制。

相关内容