有什么方法可以查看哪个进程导致了最多的 CPU 使用率?
我有 AMAZON EC2 Linux,CPU 使用率达到 100%,让我重新启动系统。我什至无法通过 SSH 登录(使用 putty)。
有什么方法可以查看是什么原因导致如此高的 CPU 使用率以及是哪个进程导致的?
我知道sar
并top
命令,但我无法在任何地方找到流程执行历史记录。这是来自 Amazon EC2 监控工具的图像,但我想知道是哪个进程导致的:
我也试过ps -eo pcpu,args | sort -k 1 -r | head -100
但没有找到如此高的 CPU 使用率。
有几种可能的方法可以做到这一点。请注意,在失控的情况下,它完全有可能是许多进程导致的,而不仅仅是一个。
第一种方法是将 pidstat 设置为在后台运行并生成数据。
这将使您每隔十分钟就可以非常详细地了解系统的运行情况。我建议这是您的第一个停靠港,因为它会产生最有价值/最可靠的数据供使用。
这有一个问题,主要是如果盒子进入失控的 cpu 循环并产生巨大的负载——你不能保证你的实际进程会在负载期间及时执行(如果有的话)所以你实际上可能会错过输出!
查找此问题的第二种方法是启用进程记帐。可能更多的是一个长期的选择。
这将启用进程记帐(如果尚未添加)。如果它之前没有运行,这将需要时间来运行。
已经运行了,比如 24 小时 - 然后你可以运行这样的命令(它会产生这样的输出)
这些列的顺序如下:
您要查找的是生成最多用户/系统 CPU 时间的进程类型。
这将数据分解为 CPU 时间总量(第一行),然后是 CPU 时间是如何划分的。进程记帐只有在进程产生时才正确记帐,因此最好在启用系统后重新启动系统以确保所有服务都被记帐。
这绝不会让您确切地知道导致此问题的过程可能是什么,但可能会给您带来良好的感觉。由于它可能是 24 小时的快照,因此可能会出现偏差结果,因此请记住这一点。它还应该始终记录,因为它是内核功能,并且与 pidstat 不同,即使在重负载期间也会始终产生输出。
最后一个可用选项也使用进程记帐,因此您可以像上面那样打开它,然后使用程序“lastcomm”生成一些在问题发生时执行的进程的统计数据以及每个进程的 cpu 统计数据。
这也可能会给您一些提示,说明可能导致问题的原因。
Atop是一个特别方便的守护进程,用于查看向下钻取到流程级别,并默认将此数据存档 28 天。除了提供一个很棒的实时监控界面外,您还可以指定要打开的日志文件并逐步查看它们。
这篇文章给出了一些功能的概念,您可以在联机帮助页中找到更多信息。
这确实是一款很棒的软件。
psmon和monit等程序可能对您有所帮助。这些可以监控系统上运行的进程,如果超过任何阈值(CPU 使用率、内存使用率...),您可以设置它们向您发送有关正在发生的事情的电子邮件报告。
也可以自动重启行为不当的进程。
一种解决方案是编写一个脚本,通过一分钟的 cron 或在睡眠循环中运行,并向您发送电子邮件/scp 作业/转储到 ebs 卷......具有相关输出(dmesg,pstree -pa 和 ps aux,可能vmstat) 它发现负载平均值超过某个限制的那一刻...