UNIX系统性能监控简述及shell实现系统资源利用率
信号以及招致的机器错。要检查的应用程序可在truss命令的命令行中指定,也可将truss命令挂在一个或多个已经在运行的进程上。
8.svmon
svmon命令用于显示当前内存的状态。其可以捕捉和分析虚拟内存的快照信息,所有的统计都是以4k内存页面为单位进行的。
3.系统利用率统计脚本程序
1.统计程序的简介
此系统利用率统计脚本程序由stat.sh、setup.sh组成,仅在AIX 4.3.3与5.2环境中测试通过,尚不支持其他UNIX服务器。推荐将两脚本置于/stat目录,确保root对两文件具有执行权限(cd /stat;chmod 755 *.sh)。可运行setup.sh脚本,此脚本将直接在root的crontab中添加一项。每晚23:55执行stat.sh。脚本默认输出到/tmp/stat目录,result.lst为日均统计值,输出格式为“日期 内存日均使用率% CPU每日峰值% CPU日均使用率%”每月统计量根据月中每日数据平均得出,每月1号凌晨产生上月统计数据并输出至report.lst。脚本中关于crontab、awk的使用说明及shell编程的方法请查阅相关技术文档。
2.setup.sh脚本
在系统的命令行中执行setup.sh,将/stat/stat.sh添加到root用户的cron定时作业项中,添加文件名为/var/spool/cron/crontabs/root。否则报出定时作业已经存在。代码如下:
#!/usr/bin/ksh
FNAME=/stat/stat.sh
CPATH=/var/spool/cron/crontabs/root
[ -f $FNAME ]||(echo "FILE: $FNAME NOT FOUND!";exit 1)
if [ "`grep $FNAME $CPATH`" = "" ];then
echo "55 23 * * * $FNAME > /dev/null 2>1" >> $CPATH
else
echo "The entry exists in $CPATH !"
fi
3.stat.sh脚本
此脚本使用AIX提供的两个重要系统性能工具vmstat和svmon分别收集cpu和内存的一整天的运行统计数据。为了不影响系统的运行,设定为在定时作业cron中每60秒执行一次,全天24小时运行,并将数据保存到cpu.日期和mem.日期文件中,以便于当天23:55分运行后使用awk工具进行一天的统计计算。
众所周知,awk进行文本处理是逐行处理的,所以只需要设置计数器cnt变量进行累加以便于计算cpu和内存的平均利用率。我们以内存平均利用率的算法进行说明,其他算法的产生与其相类似。
内存平均利用率的算法为:
设置cnt、delta、tbase、base变量初始为零,cnt为行计数变量,delta保存内存使用变化量,tbase为cron时间点上内存使用量,base为总内存量。
从mem.日期文件第一行开始,如果base为0,则将$2、$3域的值赋给base和tbase。然后进行cnt++下一行处理,即将新时间点上的内存使用量减去上一时间点的内存使用量,并将结果赋给delta变量自加:
delta+=$3-tbase
直至最后一行,进行100*(tbase+delta/cnt)/base即可得到当天的内存平均使用率了。
程序的代码如下:
#!/usr/bin/ksh
DDIR=/tmp/stat/data
[ -d $DDIR ]||mkdir -p $DDIR
RFILE=/tmp/stat/result.lst
PFILE=/tmp/stat/report.lst
# get old date
OFILE=`date +%y%m%d`
OMON=`date +%y%m`
# produce report line for yestoday: DATE MEMAVG CPUPEAK CPUAVG
if [ -f ${DDIR}/mem.${OFILE} -a -f ${DDIR}/cpu.${OFILE} ];then
awk 'BEGIN{cnt=0;delta=0;tbase=0;base=0} /^memory/{if(base==0){base=$2;tbase=$3};cnt++;delta+=$3-tbase}END{if(cnt>0)printf("%.1f",100*(tbase+delta/cnt)/base)}' ${DDIR}/mem.${OFILE} | read MEMAVG
awk 'BEGIN{cnt=0;cidmin=100;cidsum=0} /[0-9]$/{if($16cidmin)cidmin=$16;cnt++;cidsum+=$16}END{if(cnt>0)printf("%.1f\t%.1f",100-cidmin,100-cidsum/cnt)}' ${DDIR}/cpu.${OFILE} | read CPUPEAK CPUAVG
&nb sp; echo $OFILE"\t"$MEMAVG"\t"$CPUPEAK"\t"$CPUAVG >> $RFILE
fi
# wait till tomorrow
NFILE=`date +%y%m%d`
while [ "$OFILE" = "$NFILE" ]
do
sleep 60
NFILE=`date +%y%m%d`
done
# clear the old stat data file
find /tmp/stat/data -type f -ctime +31 | rm -f
# new stat
vmstat 60 1430 > ${DDIR}/cpu.${NFILE}
svmon -G -i 60 1430 > ${DDIR}/mem.${NFILE}
# produce the month report
[ -f $PFILE ]||echo "#MONTH\tMEMAVG\tCPUMAX\tCPUAVG" > $PFILE
if [ `expr $NFILE - $OFILE` -gt 1 -a -f $RFILE ];then
grep ^$OMON $RFILE | awk 'BEGIN{cnt=0;masum=0;cmsum=0;casum=0} {cnt++;masum+=$2;cmsum+=$3;casum+=$4} END{if(cnt>0)printf("%.1f%%\t%.1f%%\t%.1f%%",masum/cnt,cmsum/cnt,casum/cnt)}' | read MAVG CMAX CAVG
echo $OMON"\t"$MAVG"\t"$CMAX"\t"$CAVG >> $PFILE
fi
4.总结
综上所述,在unix
- 理解ADC误差对系统性能的影响(二)(10-15)
- 理解ADC误差对系统性能的影响(一)(10-15)
- DAC及其缓冲器有助于提升系统性能与简化设计一(10-03)
- 一种通信电源监控系统组网方案的设计(01-05)
- 通信电源监控系统模拟量采集模块的设计(01-05)
- 通信电源监控系统下位机硬件电路的设计(01-05)