在 Linux 命令行中获取 CPU 使用率的方法有哪些?

fas*_*sil 13 linux command-line

我们知道这top是在 Linux 中获取 CPU 使用率的命令,其他方式包括 cat /proc/stattop 使用的。

在Linux命令行中获取CPU使用率的其他方法是什么?

用例场景: 此命令的输出将被脚本用于连续记录 CPU 使用率。top/proc/stat给出难以记录的详细用法。有没有更简单的方法来获取 CPU 信息?

ter*_*don 15

正如其他人所说,最好的方法可能是top。它需要一些调整和一些解析,但你可以得到它以百分比形式提供当前的 CPU 使用率。

top在用户、系统进程和nice进程之间分配 CPU 使用率,我们想要三者的总和。因此,我们可以topbatch 模式下运行,这允许我们解析其输出。然而,正如这里所解释的,第一次迭代top -b返回自启动以来的百分比,因此我们至少需要两次迭代 ( -n 2) 才能获得当前百分比。为了加快速度,您可以将d迭代之间的延迟设置为0.01。最后,您grep使用包含 CPU 百分比的行,然后用于gawk对用户、系统和好的进程求和:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode
Run Code Online (Sandbox Code Playgroud)

我认为您也可以通过ps -o pcpu ax添加每个正在运行的进程的 %use 来获取此信息。不幸的是,正如这里所解释的,ps“返回在进程的整个生命周期中运行所花费的时间百分比”,这不是您所需要的。


编辑

根据您的评论,您的版本top与我的不同,您应该改用它:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
Run Code Online (Sandbox Code Playgroud)

而且,为了避免本地化问题,请将语言环境设置为 C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
Run Code Online (Sandbox Code Playgroud)


Phi*_*rns 10

sar是做到这一点的最终方法。因此,例如 sar -u将输出如下内容:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78
Run Code Online (Sandbox Code Playgroud)

您没有说您使用的是哪种 Linux,但是对于 CentOS/RedHat,您需要安装该sysstat软件包,我认为在 Debian/Ubuntu 上也是如此。

您还可以使用 sar临时收集统计信息:

sar -o /tmp/sar.out 60 600
Run Code Online (Sandbox Code Playgroud)

将每 60 秒收集 600 次统计数据,所以 600 分钟。