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

pmo*_*bed 44 linux cpu-usage

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

我有 CPU 利用率达到 100% 的 AMAZON EC2 Linux,让我重新启动系统。我什至无法通过 SSH 登录(使用腻子)。

有什么方法可以查看导致如此高 CPU 使用率的原因以及是哪个进程导致的?

我知道sartop命令,但我在任何地方都找不到进程执行历史记录。这是来自 Amazon EC2 监控工具的图像,但我想知道是哪个进程导致的:

在此处输入图片说明

我也试过,ps -eo pcpu,args | sort -k 1 -r | head -100但没有找到这么高的 CPU 使用率。

Mat*_*Ife 38

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

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

pidstat -u 600 >/var/log/pidstats.log & disown $!
Run Code Online (Sandbox Code Playgroud)

这将为您以十分钟的间隔为您提供系统运行的非常详细的展望。我建议这是您的第一个停靠港,因为它会产生最有价值/最可靠的数据。

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

第二种查找方法是启用进程记帐。可能更多是一个长期的选择。

accton on
Run Code Online (Sandbox Code Playgroud)

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

已经运行了,比如说 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    
Run Code Online (Sandbox Code Playgroud)

列的顺序如下:

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

您将寻找的是产生最多用户/系统 CPU 时间的进程类型。

这将数据分解为 CPU 时间总量(第一行),然后是 CPU 时间的分配方式。进程记帐仅在进程产生时才正确记帐,因此最好在启用它后重新启动系统以确保所有服务都被记入。

这实际上并不能让您确切地了解导致此问题的原因可能是什么过程,但可能会给您带来良好的感觉。由于它可能是 24 小时快照,因此结果可能会出现偏差,因此请记住这一点。它还应该始终记录日志,因为它是内核功能,并且与 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
Run Code Online (Sandbox Code Playgroud)

这也可能会给您一些提示,以了解可能导致问题的原因。

  • Mife,你还没用过就试试吧!它收集与 pidstat 相同的信息,但将其呈现在更适合交互式探索的界面中。如果您更喜欢 sar 风格的报告,它还有一个 atopsar 命令。 (2认同)

Jef*_*and 23

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

文章给出的能力的一些想法,你可以找到更多的手册页

这确实是一款很棒的软件。