Shell脚本整理

监视并计算一小时内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使用情况,进程名作为数组索引。