伤城文章网 > IT/计算机 > UNIX系统性能监控简述及shell实现系统资源利用率统计程序

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


论文摘要:本文简要阐述了 unix 系统中(主要以 IBM 的 AIX 为例)进行系统性能管理的几种命 令行工具,并通过编写 shell 实例程序,运用其中提到的工具实现系统资源利用率的统计程序, 为做好 unix 系统管理和调优提供参考。 1.引言 Unix 系统中性能优化以及确定系统中的性能瓶颈是系统管理员的主要任务之一。在一个计 算机系统中,CPU、内存、硬盘和网络是影响系统性能的主要因素,因此系统性能的监控以及调 整也主要在于如何在这些资源中获得某种平衡,以满足人们对系统性能的期望。 IBM 小型机 RS6000 在企业应用中被广泛采用,其上的 AIX 操作系统如同其它 UNIX 系统 一样,给系统管理员监控系统提供了非常丰富的手段。这里就以 AIX 系统中的几个监控工具为 例,利用 shell 程序及定时作业程序 cron 及强大的 awk 工具,实现统计系统资源利用率,可以每 天统计内存的日均使用率、CPU 的每日峰值、CPU 的日均使用率,并使每月统计量根据月中每 日数据平均得出, 每月 1 号凌晨产生上月统计数据, 这样就可给系统管理员了解系统运行资源的 率用率提供很好的参考。其中提到的系统工具 Vmstat、svmon、awk 等都很强大,限于篇幅不作 非常详细的介绍,如想更透彻地了解这些命令的用法,请参考有关技术资料或手册。 2.AIX 中的性能监控工具 不仅仅只要求它能够正常运行, 而且还要使其 一个系统要为用户提供持续高可用性的服务, 性能处于最佳状态。 系统管理员的职责之一就是对系统进行性能统计分析, 掌握系统的运行状态 和资源使用情况,然后通过合理配置系统资源,使系统健康运行。 性能的管理主要集中在现有资源的分配利用上, 这些资源包括物理资 从系统管理的角度看, 源和逻辑资源。物理资源包括了 CPU、内存、I/O 设备,逻辑设备包括逻辑卷管理器、虚拟内存 管理器、系统资源控制器和文件系统等。这里重点介绍一些关于系统性能的命令和工具。 1.iostat iostat 命令主要通过观察物理磁盘的活跃时间以及他们的平均传输速度,监控系统输入/输出 设备负载。根据 iostat 命令产生的报告,用户可确定一个系统配置是否平衡,并据此在物理磁盘 与适配器之间更好地平衡输入/输出负载。 2.netpmon netpmon 命令可以监控关于网络行为的系统事件和性能以及网络行为对 CPU 的消耗。 netpmon 命令在指定的监控周期报告网络行为。 3.ps 工具 ps 命令是 UNIX 系统中最常见的命令,它主要显示系统中关于进程的统计和状态信息,如 进程 ID,I/O 行为以及 CPU 利用率等。利用 ps 命令提供的信息,可决定一个进程运行了多长时 间,进程使用了多少 CPU 时间,以及进程是否受系统的惩罚。还可用 ps 命令确定进程使用了多 少内存,完成多少 I/O,进程的优先级以及是谁创建了进程。 4.vmstat vmstat 命令报告关于核心线程,虚拟内存,自陷(trap) ,磁盘以及 CPU 行为的统计。而且 每种行为报告都被更细致地用百分比分别表示用户态、核态、空闲以及等待磁盘 I/O 等情况。 内核维持了对核心线程,换页以及中断行为的统计数据,而 vmstat 命令则通过使用 knlist 子程序和/dev/kmen 伪设备驱动器访问这些数据。磁盘的输入/输出统计是通过设备驱动器维持 的。对于磁盘,平均传输速度是通过使用活跃时间核传输信息数目决定的。而活跃时间百分比则 是从报告期间驱动器忙的时间量计算出来的。 5.sar sar 命令报告 CPU 的使用情况,I/O 以及其它系统行为。sar 命令可以收集,报告以及保存系 统行为信息。如果没有指定输入文件,则 sar 调用 sarc 命令访问系统数据。

用户可用让 cron 命令运行两个 shell 脚本 (/usr/lib/sa/sa1 和/usr/lib/sa2) 以提供日统计和报表。 在 crontab 文件/var/spool/cron/crontabs/adm 中包括了一些样本节, 用于示范 cron 要在何时运行这 些 shell 脚本。以这种方式收集到的数据对于确定系统的时间周期特征和决定峰值使用时间是很 有用的。 但要注意的是,sar 命令自己运行时会产生相当数量的读写。因此最好在没有工作量的情况 下运行 sar 统计,看看 sar 对总的统计数字有多大的影响。 6.topas topas 命令用于监控各种系统资源,如 CPU 的使用情况,CPU 事件和队列,内存和换页空间 的使用,磁盘性能,网络性能以及 NFS 统计等。它还会报告指派给不同 WLM 类的进程对系统 资源的消耗情况。它还能报告系统中最热门的进程和工作量管理器(WLM)的热门类。有关 WLM 类信息只有在 WLM 激活时才会显示。topas 命令将热门进程定义为那些使用大量 CPU 时 间的进程。topas 命令没有作日志的选项,所有信息都是实时的。 7.truss truss 命令跟踪一个进程的系统调用、所接收的信号以及招致的机器错。要检查的应用程序 可在 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+=$3tbase}END{if(cnt>0)printf("%.1f",100*(tbase+delta/cnt)/base)} ’ ${DDIR}/mem.${OFILE} | read M EMAVG awk ’ BEGIN{cnt=0;cidmin=100;cidsum=0} /[0-9]$/{if($16<cidmin)cidmin=$16;cnt++;cidsum+=$16}END {if(cnt>0)printf("%.1f\t%.1f",100-cidmin,100-cidsum/cnt)} ’ ${DDIR}/cpu.${OFILE} | read CPUPE AK CPUAVG 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 CMA X CAVG echo $OMON"\t"$MAVG"\t"$CMAX"\t"$CAVG >> $PFILE fi 4.总结 综上所述,在 unix 系统中,提供了非常强大的系统监控工具。可利用这些工具并结合 shell 脚本的便利,编制非常方便实用的监控程序,并得到及时详细的系统性能统计信息。系统管理员 可根据这些数据,利用系统性能的调制工具,例如 fdpr、schedtune、vmtune 等,对系统的内核 参数作出逻辑资源上的调整或者对硬件资源升级,以此保障应用系统的安全稳定运行。


搜索更多“UNIX系统性能监控简述及shell实现系统资源利用率统计程序”

网站地图

All rights reserved Powered by 伤城文章网 5xts.com

copyright ©right 2010-2021。
伤城文章网内容来自网络,如有侵犯请联系客服。zhit325@126.com