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


18

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

Answers:


20

您可以尝试执行以下操作:

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


5
确保您在那里有某种睡眠,否则您的shell程序很有可能始终排在前10位。:)
jedberg 2009年

我认为sort -nr对数字进行排序会更好(至少在我的ubuntu / debian
博文中

2
顺便说一句,您应该给此过程最高的优先级,因为它在高负载峰值时仍然有用(毕竟这是其寿命的关键)。
spacediver 2014年

12

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



5

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

如果您希望将此信息记录为后代(或开票,或您可能还有其他用途),那么您想要的是流程记帐。

这是我找到的HOWTO,但是老实说-自从我使用流程会计以来已经有十年了。

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


2

Shawn解决方案的一种更加用户友好的方法,用于近实时监控:

while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done

这将提供每20秒刷新一次的前20个进程的静态视图。ps命令中的“ c”选项将打印进程可执行文件名称,而不是整个args命令。如果您需要整个命令信息,则可以忽略此选项。还添加了%内存使用情况列。


1

Gentoo难道没有“ top”命令吗?

machine:~/# top

应该为您提供哪个程序导致最多负载的运行统计信息。


是的,我知道,但我想记录下来,以便以后查看历史记录。当CPU出现峰值时,计算机将变得无响应,因此我无法登录并运行top以查看谁是罪魁祸首。我想稍后再查看,看看是哪个过程完成的。
Helder S Ribeiro
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.