题目要求:使用shell脚本监控检查系统某进程CPU利用率
分析:
在对应用服务进行维护时,我们经常遇到由于CPU过高导致业务阻塞,造成业务中断的情况。CPU过高可能是业务量过负荷或者出现死循环等异常情况引起的。通过脚本对业务进程CPU进行时时监控,可以在 CPU 利用率异常时及时通知维护人员,便于维护人员及时分析,定位,以及避免业务中断等。
我们可以通过指定进程pid获得此进程 CPU 利用率,如果此进程CPU利用率超过 80%(可以根据实际情况进行调整),则输出告警,否则输出正常信息。
解答:
命令行测试:
[root@myhost~]# ps -ef | egrep tomcat | egrep root | egrep -v "grep|vi|tail" | sed -n 1p | awk '{print $2}'
18430
[root@myhost ~]# ps -p 18430 -o pcpu
%CPU
0.4
[root@myhost ~]# ps -p 18430 -o pcpu |egrep -v CPU
0.4
[root@myhost ~]# ps -p 18430 -o pcpu |egrep -v CPU | awk '{print $1}'
0.4
脚本:
#!/bin/sh
source /etc/profile
#define variable
psUser=$1
psProcess=$2
pid= `ps -ef | egrep ${psProcess} | egrep ${psUser} | egrep -v "grep|vi|tail" | sed -n 1p | awk '{print $2}'`
echo ${pid}
if [ -z ${pid} ];then
echo "The process does not exist."
exit 1
fi
CpuValue=`ps -p ${pid} -o pcpu |egrep -v CPU |awk '{print $1}'`
echo ${CpuValue}
flag=`echo ${CpuValue} | awk -v tem=80 '{print($1>tem)? "1":"0"}'`
if [ ${flag} -eq 1 ];then
echo “The usage of cpu is larger than 80%”
else
echo “The usage of cpu is ok”
fi
注意:
CpuValue=` ps -p ${pid} -o pcpu |egrep -v CPU | awk '{print $1}' `
echo ${CpuValue}
if [ ${CpuValue} -ge 80 ];then
echo “The usage of cpu is larger than 80%”
else
echo “The usage of cpu is ok”
fi
直接用上面的代码会报错
shell脚本 line 23: [: 0.0: integer expression expected
那是因为此时CpuValue的值是字符串
在linux中shell脚本中gt,lt 和eq只能对整数操作,如果使用整数与小数对比,会出现integer expression expected错误.一种变通方法就是用管道给awk进行处理.