【发布时间】:2012-03-28 14:41:19
【问题描述】:
如何使用 shell 脚本计算 CPU 使用率值,我得到一个错误,因为 [: =: unary operator 在if [ $message -ne "" ] 行预期
#!/bin/sh
expected_cpuusage="95"
cpu_usage=`top -n 1 -b|grep Cpu|awk '{print $2}'|cut -d"%" -f1""`
message=""
if [ $cpu_usage -gt $expected_cpuusage ] ##{x%?}
then
echo "CPU usage exceeded";
if [ $message -ne "" ]
then
message="$message\n\nCPU usage exceeded configured usage limit \nCurrent CPU usage is $cpu_usage\nConfigured CPU usage is $expected_cpuusage";
else
message="CPU usage exceeded configured usage limit \nCurrent CPU usage is $cpu_usage\nConfigured CPU usage is $expected_cpuusage";
fi ;
fi
【问题讨论】:
-
解析
top的输出几乎不是正确的方法。尝试man uptime或直接从/proc阅读(如果您的架构有)。 -
我同意@tripleee。这是获得 CPU 利用率的更好方法:
bc<<<"scale=3;$(ps ax -o pcpu= | sort -n | xargs printf '+ %s' | cut -c 2- | bc) / $(grep -c ^processor /proc/cpuinfo)"(假设 bash 和 Linux/proc/)。这给出了所有内核的平均值,因此双核系统上一个内核的 50% 利用率将返回25.000。 “CPU 利用率”部分应该是相当可移植的,只是“多少个内核?”部分不是。 -
这种方法的一个好处是您可以删除
scale=3;,并确保您现在返回一个非浮点数,您可以直接与-gt一起使用。跨度>