监视并计算一小时内CPU使用情况
#!/bin/bash
#file name: pcpu_usage.sh
#purpose: 计算1小时内进程的CPU占用情况
#SECS为需要进行监视的总秒数
#UNIT_TIME是取样的时间间隔,单位是秒
SECS=3600
UNIT_TIME=60
STEPS=$(( $SECS / $UNIT_TIME ))
echo "watching CPU usage...";
for((i=0;i<STEPS;i++))
do
ps -eocomm,pcpu | tail -n +2 >> ./cpu_usage.$$
sleep $UNIT_TIME
done
echo
echo CPU eaters:
cat ./cpu_usage.$$ | awk ‘
{ process[$1]+=$2; }
END{
for(i in process)
{
printf("%-20s %s\n",i,process[i]);
}
}‘ | sort -nrk 2 | head
rm ./cpu_usage.$$
- 输入源:ps -eo comm,pcpu。其中comm标识命令名(command name),pcpu表示CPU使用率(CPU usage in percent)。该命令输出所有进程名及CPU使用率;
- 使用sleep 60来表示每次统计的迭代时间为60秒;
- tail -n +2将 ps 输出中头部和COMMAND %CPU去掉;
- cpu_usage.$$中$$表示当前脚本的进程ID;
- 使用awk求出每个进程总的CPU使用情况,用一个关联数组统计CPU使用情况,进程名作为数组索引。