我正在构建一个基于 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
则将使用它。