微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > UNIX系统性能监控简述及shell实现系统资源利用率

UNIX系统性能监控简述及shell实现系统资源利用率

时间:03-17 来源:互联网 点击:

信号以及招致的机器错。要检查的应用程序可在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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top