计算机系统的性能优化是一个综合性较强的话题,它涉及对系统资源以及应用环境(如应用程序及网络环境)的分析。本文将就如何检测RS/6000系统性能,找出引起性能降低的资源瓶颈做一个简单介绍(注:本文不涉及由应用程序或网络因素引起的资源瓶颈问题)。
所谓系统资源包括内存、
CPU和输入/输出设备。通过使用以下命令,可以对RS/6000系统资源的负载情况有一个清楚的了解:
vmstat
svmon
ps
tprof
iostat
netpmon
filemon
注:
使用命令
vmstat、iostat和sar之前需安装软件包
bos.acct
使用命令ps需安装软件包
bos.rte.control
使用命令tprof、svmon、netpmon和filemon之前,需要安装软件包
perfagent.tools
我们可以从
AIX系统盘的第一张光盘上寻找并安装上述软件包。本文还将引用命令vmtune和schedtune,使用前需安装软件包
bos.adt.samples
内存瓶颈
本节介绍以下几个用于检测系统的内存使用情况的命令,通过它们可以清楚地了解系统内存的使用及分配情况,确认内存资源是否存在瓶颈。
1.
vmstat
vmstat命令用于统计并显示核心线程、虚拟内存、硬盘、中断及
CPU的使用情况。
运行命令
#
vmstat210
注:当pi和po为连续非零值时,系统运行速度将会降低。
pi每秒钟从页空间(PagingSpace)调入内存的页面数(4KB/page);
po每秒钟从内存调入页空间(PagingSpace)的页面数;
当进程请求的内存页面数大于内存中可用页面数时,一些内存页会被换出内存,存放于系统页空间(PagingSpace)中,以后使用时再调入内存。由于访问页空间中页面的速度远小于对内存页面的访问速度,所以频繁的换页会降低系统运行速度。
注:当fr和sr的数值增大时,sample明内存负载增大。
fr为填充内存空闲sample或分配给某进程所需要释放的内存页面;
sr为得到fr数量的空闲页面所需要检查的页面数;
fr/sr比例为1:4sample明每释放一个内存页面需要检查四个页面。
当po*SYS>;fr(SYS为一系统参数,可用命令schedtune
查看)时,系统自身认为已到崩溃边缘。SYS在有128MB或更多内存的系统上默认值为0,sample示禁止内存加载控制,否则默认值为6。系统崩溃sample明此时系统使用大量时间用于内存换入/换出,而没有足够时间处理应用或正常工作。这时一些进程将被临时挂起,系统运行明显减慢。
2.svmon
svmon命令统计并显示虚拟内存的使用情况。
以超级用户(root)身份运行命令
#svmon-Pau10|more
输出如下:
PidCommandInusePinPgspace
13794dtwm16031449
Pid:13794
Command:dtwm
这条命令显示出使用内存最多的前十个进程,并针对每个进程给出了一个详细列sample(上sample为其中一个进程的描述信息)。在每个进程的列sample中,找出Type为"work"及Description为"private"的相应行,
查看Pgspace显示的使用页面数(每个页面大小为4096字节),该数值为此段(segment)在虚拟内存空间中占用的工作页面(workingpages)数,即占用的页空间中的页面数。如果Pgspace值持续增长,系统则有可能存在内存泄漏(memoryleak)。当应用程序不能正常释放内存时会出现内存泄漏的问题。
上述命令格式及输出结果适用于
AIX4.3.3之前的版本。在
AIX4.3.3的系统上可运行命令
svmon-Pu10|more
其输出格式与上条命令基本相同,但字段"Pgspace"用"Pgsp"取代。
3.ps
ps命令显示当前运行的进程状态信息。
运行下列命令
#psgv|head-n1;psgv|egrep-v"RSS"|sort+6b-7-n-r
SIZE页空间中分配给该进程的Type为"work",Description为"private"的内存段大小(K字节为单位)。该数值也可通过命令svmon显示。
RSS进程当前占用的内存段(物理内存)大小(K字节为单位),包括Type为"work"和Description为"private"的内存段及Type为"pers"和Description为"code"的内存段。该数值可通过命令svmon显示。
TRS进程常驻内存的正文段大小,包括Type为"pers"及Description为"code"的内存段。该数值可通过命令svmon显示。
%MEMRSS占系统物理内存的百分比(%)。
如上所述,使用ps命令同样可以
查看各进程的内存分配情况。
CPU瓶颈
下面我们将就如何使用命令
vmstat、tprof和ps检查系统是否存在
CPU瓶颈做一个简单介绍。
1.
vmstat
使用命令
#
vmstat110
注:运行队列有进程等待时系统运行速度会降低。
id
CPU空闲时间或无I/O等待时间的百分比;
wa
CPUI/O等待时间的百分比;
r运行队列中的线程数;
如果id和wa的值持续为接近0的值,sample明
CPU此时处于繁忙状态。
下面来看看字段r(运行队列中的线程数)。运行队列中等待的线程数越多,系统性能受到的影响越大。
2.tprof
tprof命令用于统计每个进程的
CPU使用情况。
以超级用户root的身份运行下列命令,可以找出进程占用的
CPU时间:
#tprof-xsleep30
此命令运行30秒钟,在当前目录下创建一个名为_prof.all的文件。30秒钟内,
CPU被调度次数约为3000次。__prof.all文件中的字段Total为此进程调度到的
CPU次数。如果进程所对应的Total字段的值为1500,sample示该进程在3000次
CPU调度中占用了1500次,或理解为使用了一半的
CPU时间。tprof的输出准确地显示出哪个进程在使用
CPU时间。
__prof.all文件示例:
3.netpmon
netpmon命令用于监控与网络有关的I/0及
CPU的使用情况。
以root身份运行下面的命令,可以找出进程使用的
CPU时间,以及其中与网络有关的代码使用的
CPU时间:
#netpmon-o/tmp/netpmon.out-O
cpu-v;sleep30;trcstop
此命令运行30秒钟,并在/tmp目录下生成文件netpmon.out。其中字段
CPUTime为进程使用
CPU
的时间总值,
CPU%对应其百分比,Network
CPU%为进程中与网络有关的代码所占用的
CPU百分比。如下所示:
输入输出(I/O)瓶颈
1.iostat
iostat命令用于统计
CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量。
运行命令:
iostat510
将显示10次统计结果,下面为其中一次的数据:
其中
%iowait等待本地I/O时
CPU空闲时间的百分比
%idle未等待本地I/O时
CPU空闲时间的百分比
当没有需使用
CPU的进程但至少有一个进程在等待I/O时,
CPU时间属性标为iowait。如果iowait时间的百分比很高,sample示该磁盘输入输出(I/O)是导致系统运行速度缓慢的主要原因。
%tm_act硬盘繁忙的百分比
注:tm_act的值很高,sample明硬盘存在I/O瓶颈。
当%tm_act(硬盘繁忙时间)很高时,可能会感觉到系统运行速度在减慢。有些系统上某个硬盘的%tm_act值为60%或更高时,系统性能就会受到影响。
两点建议:
1.观察繁忙与空闲的硬盘,将数据从忙的盘移至相对空闲的的盘上,这会在一定程度上减轻由此引起的I/O瓶颈。
2.依照上面"内存瓶颈"中介绍的方法检查内存换页的频繁程度。大量的换页操作会增加I/O负载。
2.filemon
filemon命令用于
查看哪些文件/逻辑卷/硬盘处于繁忙状态。在系统I/O处于繁忙状态时运行下面的命令:
#filemon-u-Oall-o/tmp/fmon.out;sleep30;trcstop
30秒钟后会生成记录跟踪信息的文件/tmp/fmon.out。从该文件中可以找出:
1.最为繁忙的虚拟内存段(segment)、逻辑卷和物理卷;
2.对页空间(pagingspace)的读写次数,确认硬盘I/O是由于应用程序操作还是频繁的换页操作;
3.最为活跃的文件或逻辑卷,如果它们存放在繁忙的物理卷上,可以考虑将数据移至相对空闲的硬盘上,这样有助于提高系统性能。最为繁忙的段的报sample里列示出最繁忙的文件所对应的文件系统和i节点。文件系统的安装点(mountpoint)及文件的i节点(inode)可与命令ncheck一起使用,来找出相对应的文件。这个报sample可用来判断该I/O操作是针对文件系统、JFSLog还是系统页空间的。
通过检查字段"reads"和"readsequences"的值,可以判断该操作是顺序读取还是随机读取。当"readsequences"接近"reads"时,对该文件的访问则以随机读取方式居多。(附录A为命令filemon的输出示例)
结束语
在这里有一个极有用的工具值得给大家一提,就是RS/6000性能诊断工具包-PerformanceToolbox,一个用来检测系统性能的功能非常完善的软件包。其中包括基于X-Windows的图形界面诊断工具xmperf,用于实时检测系统资源的使用情况。(注:该软件包不在
AIX操作系统光盘中提供。)
我们在上面的文字中讨论了有关RS/6000系统的资源瓶颈问题,其中涉及到的系统命令的具体用法可以查找
AIX联机命令手册。此外,一个系统的性能如何还与网络因素及应用程序有着密切的关系,分析这诸多因素的方法及工具还有很多,在此不做一一介绍了。希望大家在实际工作中逐步摸索,成为RS/6000系统性能分析专家
附录A(filemon输出文件示例)
---------------------------------------
ThuAug1911:30:491999
System:
AIXtexmexNode:4Machine:000691854C00
0.369secsinmeasuredinterval
Cpuutilization:9.0%
MostActiveFiles
-----------------------------------------------------------------------------
#MBs#opns#rds#wrsfilevolume:inode
-----------------------------------------------------------------------------
0.11140smit.log/dev/hd4:858
0.01013null
0.0240ksh.cat/dev/hd2:16872
0.0120cmdtrace.cat/dev/hd2:16739
MostActiveSegments
------------------------------------------------------------------------------
#MBs#rpgs#wpgssegidsegtypevolume:inode
------------------------------------------------------------------------------
0.11305e93???
0.02022ed???
0.0105c77persistent
MostActiveLogicalVolumes
------------------------------------------------------------------------------
util#rblk#wblkKB/svolumedescription
------------------------------------------------------------------------------
0.061120151.9/dev/hd4/
0.0416021.7/dev/hd2/usr
MostActivePhysicalVolumes
------------------------------------------------------------------------------
util#rblk#wblkKB/svolumedescription
------------------------------------------------------------------------------
0.101280173.6/dev/hdisk0N/A
------------------------------------------------------------------------------
DetailedFileStats
------------------------------------------------------------------------------
file:/smit.logvolume:/dev/hd4(/)inode:858
opens:1
totalbytesxfrd:57344
reads:14(0errs)
readsizes(bytes):avg4096.0min4096max4096sdev0.0
readtimes(msec):avg1.709min0.002max19.996sdev5.092
file:/dev/null
opens:1
totalbytesxfrd:50600
writes:13(0errs)
writesizes(bytes):avg3892.3min1448max4096sdev705.6
writetimes(msec):avg0.007min0.003max0.022sdev0.006
file:/usr/lib/nls/msg/en_US/ksh.catvolume:/dev/hd2(/usr)inode:16872
opens:2
totalbytesxfrd:16384
reads:4(0errs)
readsizes(bytes):avg4096.0min4096max4096sdev0.0
readtimes(msec):avg0.042min0.015max0.070sdev0.025
lseeks:10
file:/usr/lib/nls/msg/en_US/cmdtrace.catvolume:/dev/hd2(/usr)inode:
16739
opens:1
totalbytesxfrd:8192
reads:2(0errs)
readsizes(bytes):avg4096.0min4096max4096sdev0.0
readtimes(msec):avg0.062min0.049max0.075sdev0.013
lseeks:8
------------------------------------------------------------------------------
DetailedVMSegmentStats(4096bytepages)
------------------------------------------------------------------------------
SEGMENT:5e93segtype:???
segmentflags:
reads:13(0errs)
readtimes(msec):avg1.979min0.957max5.970sdev1.310
readsequences:1
readseq.lengths:avg13.0min13max13sdev0.0
SEGMENT:22edsegtype:???
segmentflags:inode
reads:2(0errs)
readtimes(msec):avg8.102min7.786max8.418sdev0.316
readsequences:2
readseq.lengths:avg1.0min1max1sdev0.0
SEGMENT:5c77segtype:persistent
segmentflags:persdefer
reads:1(0errs)
readtimes(msec):avg13.810min13.810max13.810sdev0.000
readsequences:1
readseq.lengths:avg1.0min1max1sdev0.0
------------------------------------------------------------------------------
DetailedLogicalVolumeStats(512byteblocks)
------------------------------------------------------------------------------
VOLUME:/dev/hd4description:/
reads:5(0errs)
readsizes(blks):avg22.4min8max40sdev12.8
readtimes(msec):avg4.847min0.938max13.792sdev4.819
readsequences:3
readseq.lengths:avg37.3min8max64sdev22.9
seeks:3(60.0%)
seekdist(blks):init6344,
avg40.0min8max72sdev32.0
timetonextreq(msec):avg70.473min0.224max331.020sdev130.364
throughput:151.9KB/sec
utilization:0.06
VOLUME:/dev/hd2description:/usr
reads:2(0errs)
readsizes(blks):avg8.0min8max8sdev0.0
readtimes(msec):avg8.078min7.769max8.387sdev0.309
readsequences:2
readseq.lengths:avg8.0min8max8sdev0.0
seeks:2(100.0%)
seekdist(blks):init608672,
avg16.0min16max16sdev0.0
timetonextreq(msec):avg162.160min8.497max315.823sdev153.663
throughput:21.7KB/sec
utilization:0.04
------------------------------------------------------------------------------
DetailedPhysicalVolumeStats(512byteblocks)
------------------------------------------------------------------------------
VOLUME:/dev/hdisk0description:N/A
reads:7(0errs)
readsizes(blks):avg18.3min8max40sdev12.6
readtimes(msec):avg5.723min0.905max20.448sdev6.567
readsequences:5
readseq.lengths:avg25.6min8max64sdev22.9
seeks:5(71.4%)
seekdist(blks):init4233888,
avg171086.0min8max684248sdev296274.2
seekdist(%totblks):
init48.03665,
avg1.94110min0.00009max7.76331sdev3.36145
timetonextreq(msec):
avg50.340min0.226max315.865sdev108.483
throughput:173.6KB/sec
utilization:0.10