我正在尝试使用bash计算单个CPU,Ubuntu系统的整体CPU利用率。我需要我正在制作的系统监视脚本的总体CPU使用百分比。问题是,当我使用以下代码时,CPU利用率百分比始终相同:
top -n 1 | grep "Cpu"
我找到的替代方法是使用以下代码:
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))
echo $CPU
这段代码的问题是我不知道它是否完全准确。我有几个问题......首先为什么第一个代码失败了?第二,第二个代码是可靠的吗?如果没有,我可以用什么代码来获得系统整体CPU利用率的可靠读数?谢谢!
答案 0 :(得分:1)
systat包中提供的mpstat非常好
您必须使用apt-get
安装systat答案 1 :(得分:1)
您的代码正在丢弃可能影响CPU利用率的IO等待时间。您可以参考以下链接查看每个/ proc / stat /条目对应的内容:
http://man7.org/linux/man-pages/man5/proc.5.html
总体CPU利用率可通过以下公式计算:
CPU_Util =(用户+系统+不错+ softirq +窃取)/(用户+系统+不错+ softirq +窃取+空闲+爱荷华州)
一个简单的bash脚本可以计算超过50ms的CPU利用率:
#!/system/bin/sh
# Read /proc/stat file
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat
cpu_active_prev=$((user+system+nice+softirq+steal))
cpu_total_prev=$((user+system+nice+softirq+steal+idle+iowait))
usleep 50000
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat
cpu_active_cur=$((user+system+nice+softirq+steal))
cpu_total_cur=$((user+system+nice+softirq+steal+idle+iowait))
cpu_util=$((100*( cpu_active_cur-cpu_active_prev ) / (cpu_total_cur-cpu_total_prev) ))
echo $cpu_util