读取 CPU 使用率

读取 CPU 使用率

我正在构建一个基于 Web 的 Linux 资源监视器。

现在我期待使用:

  • df用于读取硬盘使用状态
  • /proc/meminfo(通过 cat )读取 RAM 状态
  • mpstat(来自 sysstat 包)用于读取 CPU 使用率

虽然和df几乎/proc/meminfo立即返回数据,mpstat但会延迟我指定的间隔 - 接受的最小值为 1(以秒为单位)。

是否有实时 CPU 使用率读取器,或者是否有办法mpstat“立即”返回?

mpstat 输出:

[psycketom@stone ~]# mpstat -P ALL 1 1
Linux 3.5.4-1-ARCH (stone)      03/05/2013      _x86_64_        (1 CPU)

11:33:15 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:33:16 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:33:16 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

答案1

您可以top在批处理模式和单次迭代中使用:

top -bn 1

我也会使用free而不是解析meminfo

另一种方法是使用ps,将每个进程的 CPU% 相加,然后除以您的机器的核心数:

ps axo pcpu | 
 gawk -v cores=`grep -m 1 cores /proc/cpuinfo | cut -d ' ' -f 3` \
      -v cpus=`grep -c processor /proc/cpuinfo` \
         '{k+=$1}END{print k/(cores * cpus);}'

如果您的系统只有一个核心,上述脚本将会失败,并产生:

gawk: cmd. line:1: (FILENAME=- FNR=83) fatal: division by zero attempted

为了使其运行,请将其更改k/(cores * cpus)k/(cores==""?1:cores * cpus)。这将检查cores变量是否不为空,如果是,1则将使用它。

相关内容