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 使用率,我们想要三者的总和。因此,我们可以top在batch 模式下运行,这允许我们解析其输出。然而,正如这里所解释的,第一次迭代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 分钟。
| 归档时间: |
|
| 查看次数: |
33270 次 |
| 最近记录: |