我们知道这top
是一个在Linux中获取CPU使用率的命令,其他方法还包括
cat /proc/stat
top所使用的方法。
在 Linux 命令行中还有哪些其他方法可以获取 CPU 使用率?
用例场景: 此命令的输出将被脚本用来连续记录 CPU 使用情况,top
并/proc/stat
提供难以记录的详细使用情况。有没有更简单的方法来获取 CPU 信息?
答案1
正如其他人所说,最好的方法可能是top
。它需要一点调整和解析,但您可以让它以百分比形式显示当前的 CPU 使用率。
top
在用户、系统进程和nice
进程之间分配 CPU 使用率,我们想要三者的总和。因此,我们可以top
在b
atch 模式下运行,这允许我们解析其输出。但是,正如所解释的这里,第一次迭代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 分钟。