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

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

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

在 Linux 命令行中还有哪些其他方法可以获取 CPU 使用率?

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

答案1

正如其他人所说,最好的方法可能是top。它需要一点调整和解析,但您可以让它以百分比形式显示当前的 CPU 使用率。

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

    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

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


编辑

根据您的评论,您的版本top与我的不同,您应该使用这个:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

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

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

答案2

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

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

您还可以使用 sar 来收集统计数据特别指定

sar -o /tmp/sar.out 60 600

每 60 秒将收集统计数据 600 次,因此共计 600 分钟。

相关内容