Linux CPU使用率和进程执行历史

有没有什么方法可以查看哪个进程导致CPU使用率最高?

我有AMAZON EC2 Linux,CPU利用率达到100%,使我重新启动系统。 我甚至无法通过SSHlogin(使用腻子)。

有什么办法可以看到是什么原因导致了如此高的CPU使用率以及哪个进程造成了这种情况

我知道sartop命令,但我无法find任何地方的进程执行历史。 这里是来自亚马逊EC2监控工具的图像,但我想知道哪个过程造成的:

在这里输入图像描述

我也试过ps -eo pcpu,args | sort -k 1 -r | head -100 ps -eo pcpu,args | sort -k 1 -r | head -100 ps -eo pcpu,args | sort -k 1 -r | head -100但没有运气发现如此高的CPU使用率。

    有几种可能的方法可以做到这一点。 请注意,它完全有可能在一个失控的情况下导致这个,而不仅仅是一个过程。

    第一种方法是设置pidstat在后台运行并生成数据。

     pidstat -u 600 >/var/log/pidstats.log & disown $! 

    这样会以十分钟的间隔给你一个非常详细的系统运行的前景。 我会build议这是您的第一个停靠港,因为它提供了最有价值/可靠的数据来处理。

    这有一个问题,主要是如果盒进入一个失控的cpu循环,并产生巨大的负载 – 你不能保证你的实际过程将在加载过程中及时执行(如果有的话),所以你可能会错过输出!

    寻找这个的第二种方法是启用进程记帐。 可能更多的是一个长期的select。

     accton on 

    这将启用进程记帐(如果尚未添加)。 如果没有运行,则需要时间运行。

    已经跑了,比如24小时 – 你可以运行这样的命令(这将产生这样的输出)

     # sa --percentages --separate-times 108 100.00% 7.84re 100.00% 0.00u 100.00% 0.00s 100.00% 0avio 19803k 2 1.85% 0.00re 0.05% 0.00u 75.00% 0.00s 0.00% 0avio 29328k troff 2 1.85% 0.37re 4.73% 0.00u 25.00% 0.00s 44.44% 0avio 29632k man 7 6.48% 0.00re 0.01% 0.00u 0.00% 0.00s 44.44% 0avio 28400k ps 4 3.70% 0.00re 0.02% 0.00u 0.00% 0.00s 11.11% 0avio 9753k ***other* 26 24.07% 0.08re 1.01% 0.00u 0.00% 0.00s 0.00% 0avio 1130k sa 14 12.96% 0.00re 0.01% 0.00u 0.00% 0.00s 0.00% 0avio 28544k ksmtuned* 14 12.96% 0.00re 0.01% 0.00u 0.00% 0.00s 0.00% 0avio 28096k awk 14 12.96% 0.00re 0.01% 0.00u 0.00% 0.00s 0.00% 0avio 29623k man* 7 6.48% 7.00re 89.26% 0.00u 0.00% 0.00s 

    这些列是这样排列的:

    1. 通话次数
    2. 通话的百分比
    3. 在此types的所有进程上花费的实时时间量。
    4. 百分比。
    5. 用户CPU时间
    6. 百分比
    7. 系统CPU时间。
    8. 平均IO调用。
    9. 百分比
    10. 命令名称

    您将要查找的是生成最多用户/系统CPU时间的进程types。

    这将数据分解为总CPU时间(最上面一行)以及CPU时间如何分割。 进程记帐只有在进程产生时才能正确记帐,因此在启用它之后最好重新启动系统,以确保所有服务都被占用。

    这实际上并没有给你一个明确的想法,这个问题的原因可能是什么过程,但可能给你一个好的感觉。 因为这可能是一个24小时的快照,所以有可能出现扭曲的结果。 它也应该始终logging,因为它的内核function,而不像pidstat将始终产生输出,即使在重载。

    可用的最后一个选项也使用进程记帐,因此您可以像上面那样打开它,但是随后使用程序“lastcomm”生成一些统计信息以及每个进程的cpu统计信息。

     lastcomm | grep "May 8 22:[01234]" kworker/1:0 F root __ 0.00 secs Tue May 8 22:20 sleep root __ 0.00 secs Tue May 8 22:49 sa root pts/0 0.00 secs Tue May 8 22:49 sa root pts/0 0.00 secs Tue May 8 22:49 sa X root pts/0 0.00 secs Tue May 8 22:49 ksmtuned F root __ 0.00 secs Tue May 8 22:49 awk root __ 0.00 secs Tue May 8 22:49 

    这可能会给你一些提示,可能会导致问题。

    Atop是一个特别方便的守护进程,用于查看过程级别的下钻,默认情况下将这些数据存档28天。 除了提供一个真棒实时监控界面,您可以指定这些日志文件打开并逐步通过它们。

    文章给出了一些function的概念,你可以在manpage中find更多的东西。

    这真是一个非常棒的软件。

    诸如psmon和monit等程序可能对您有帮助。 那些可以监视系统上运行的进程,并且如果超过任何阈值(CPU使用率,内存使用量),您可以设置它们向您发送关于正在进行的电子邮件报告。

    也可以自动重新启动这些行为不当的进程。

    一种解决scheme是编写一个脚本,通过一分钟或一个睡眠循环运行,并发送一个电子邮件/ scp作业/转储到ebs卷…与相关输出(dmesg,pstree -pa和ps aux,可能vmstat)即时发现负载平均超过一定的限制…