AIX 系统性能检测

来源:互联网 发布:淘宝滥用商标关键字 编辑:程序博客网 时间:2024/04/30 08:16
计算机系统的性能优化是一个综合性较强的话题,它涉及对系统资源以及应用环境(如应用程序及网络环境)的分析。本文将就如何检测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的使用情况。 
运行命令 
vmstat 2 10 
注: 当pi和po为连续非零值时,系统运行速度将会降低。 
pi 每秒钟从页空间(Paging Space)调入内存的页面数(4KB/page); 
po 每秒钟从内存调入页空间(Paging Space)的页面数; 
当进程请求的内存页面数大于内存中可用页面数时, 一些内存页会被换出内存, 存放于系统页空间(Paging Space)中, 以后使用时再调入内存。由于访问页空间中页面的速度远小于对内存页面的访问速度,所以频繁的换页会降低系统运行速度。 

注: 当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 -Pau 10 | more 
输出如下: 
Pid Command Inuse Pin Pgspace 
13794 dtwm 1603 1 449 
Pid: 13794 
Command: dtwm 
这条命令显示出使用内存最多的前十个进程,并针对每个进程给出了一个详细列sample(上sample为其中一个进程的描述信息)。在每个进程的列sample中,找出Type为"work"及Description为"private"的相应行,查看Pgspace显示的使用页面数(每个页面大小为4096字节),该数值为此段(segment)在虚拟内存空间中占用的工作页面(working pages)数,即占用的页空间中的页面数。如果Pgspace值持续增长,系统则有可能存在内存泄漏(memory leak)。当应用程序不能正常释放内存时会出现内存泄漏的问题。 
上述命令格式及输出结果适用于AIX4.3.3之前的版本。在AIX4.3.3的系统上可运行命令 
svmon -Pu 10 | more 
其输出格式与上条命令基本相同,但字段"Pgspace"用"Pgsp"取代。 
3. ps 
ps命令显示当前运行的进程状态信息。 
运行下列命令 
#ps gv | head -n 1; ps gv | 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显示。 
%MEM RSS占系统物理内存的百分比(%)。 
如上所述,使用ps命令同样可以查看各进程的内存分配情况。 
CPU 瓶颈 

下面我们将就如何使用命令vmstat、tprof和ps检查系统是否存在CPU瓶颈做一个简单介绍。 
1. vmstat 
使用命令 
vmstat 1 10 
注: 运行队列有进程等待时系统运行速度会降低。 
id CPU 空闲时间或无I/O等待时间的百分比; 
wa CPU I/O 等待时间的百分比; 
r 运行队列中的线程数; 
如果 id 和wa 的值持续为接近0的值,sample明CPU此时处于繁忙状态。 
下面来看看字段r(运行队列中的线程数)。运行队列中等待的线程数越多,系统性能受到的影响越大。 
2. tprof 
tprof命令用于统计每个进程的CPU使用情况。 
以超级用户root的身份运行下列命令,可以找出进程占用的CPU时间: 
# tprof -x sleep 30 
此命令运行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; sleep 30; trcstop 
此命令运行30 秒钟,并在/tmp目录下生成文件 netpmon.out。其中字段 CPU Time 为进程使用CPU 
的时间总值,CPU%对应其百分比,Network CPU% 为进程中与网络有关的代码所占用的CPU百分比。如下所示: 
输入输出(I/O)瓶颈 

1. iostat 
iostat命令用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量。 
运行命令: 
iostat 5 10 
将显示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 -O all -o /tmp/fmon.out; sleep 30; trcstop 
30秒钟后会生成记录跟踪信息的文件 /tmp/fmon.out。从该文件中可以找出: 
1. 最为繁忙的虚拟内存段(segment)、逻辑卷和物理卷; 
2. 对页空间(paging space)的读写次数,确认硬盘I/O 是由于应用程序操作还是频繁的换页操作; 
3. 最为活跃的文件或逻辑卷,如果它们存放在繁忙的物理卷上,可以考虑将数据移至相对空闲 的硬盘上,这样有助于提高系统性能。最为繁忙的段的报sample里列示出最繁忙的文件所对应的文件系统和i节点。文件系统的安装点(mount point)及文件的i节点(inode)可与命令ncheck一起使用,来找出相对应的文件。这个报sample可用来判断该I/O操作是针对文件系统、JFS Log 还是系统页空间的。 
通过检查字段"reads"和"read sequences"的值,可以判断该操作是顺序读取还是随机读取。当 "read sequences"接近"reads"时,对该文件的访问则以随机读取方式居多。(附录A为命令 filemon 的输出 示 例) 
结束语 
在这里有一个极有用的工具值得给大家一提,就是RS/6000性能诊断工具包-Performance Toolbox, 一个用来检测系统性能的功能非常完善的软件包。其中包括基于X-Windows的图形 界面诊断工具 xmperf,用于实时检测系统资源的使用情况。(注:该软件包不在AIX操作系统光盘中提供。) 
我们在上面的文字中讨论了有关RS/6000系统的资源瓶颈问题,其中涉及到的系统命令的具体用法可以查找AIX联机命令手册。此外,一个系统的性能如何还与网络因素及应用程序有着密切的关系,分析这诸多因素的方法及工具还有很多,在此不做一一介绍了。希望大家在实际工作中逐步摸索,成为RS/6000系统性能分析专家 
附录A (filemon 输出文件示例) 
--------------------------------------- 
Thu Aug 19 11:30:49 1999 
System: AIX texmex Node: 4 Machine: 000691854C00 
0.369 secs in measured interval 
Cpu utilization: 9.0% 
Most Active Files 
----------------------------------------------------------------------------- 
#MBs #opns #rds #wrs file volume:inode 
----------------------------------------------------------------------------- 
0.1 1 14 0 smit.log /dev/hd4:858 
0.0 1 0 13 null 
0.0 2 4 0 ksh.cat /dev/hd2:16872 
0.0 1 2 0 cmdtrace.cat /dev/hd2:16739 
Most Active Segments 
------------------------------------------------------------------------------ 
#MBs #rpgs #wpgs segid segtype volume:inode 
------------------------------------------------------------------------------ 
0.1 13 0 5e93 ??? 
0.0 2 0 22ed ??? 
0.0 1 0 5c77 persistent 
Most Active Logical Volumes 
------------------------------------------------------------------------------ 
util #rblk #wblk KB/s volume description 
------------------------------------------------------------------------------ 
0.06 112 0 151.9 /dev/hd4 / 
0.04 16 0 21.7 /dev/hd2 /usr 
Most Active Physical Volumes 
------------------------------------------------------------------------------ 
util #rblk #wblk KB/s volume description 
------------------------------------------------------------------------------ 
0.10 128 0 173.6 /dev/hdisk0 N/A 
------------------------------------------------------------------------------ 
Detailed File Stats 
------------------------------------------------------------------------------ 
file: /smit.log volume: /dev/hd4 (/) inode: 858 
opens: 1 
total bytes xfrd: 57344 
reads: 14 (0 errs) 
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0 
read times (msec): avg 1.709 min 0.002 max 19.996 sdev 5.092 
file: /dev/null 
opens: 1 
total bytes xfrd: 50600 
writes: 13 (0 errs) 
write sizes (bytes): avg 3892.3 min 1448 max 4096 sdev 705.6 
write times (msec): avg 0.007 min 0.003 max 0.022 sdev 0.006 
file: /usr/lib/nls/msg/en_US/ksh.cat volume: /dev/hd2 (/usr) inode: 16872 
opens: 2 
total bytes xfrd: 16384 
reads: 4 (0 errs) 
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0 
read times (msec): avg 0.042 min 0.015 max 0.070 sdev 0.025 
lseeks: 10 
file: /usr/lib/nls/msg/en_US/cmdtrace.cat volume: /dev/hd2 (/usr) inode: 
16739 
opens: 1 
total bytes xfrd: 8192 
reads: 2 (0 errs) 
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0 
read times (msec): avg 0.062 min 0.049 max 0.075 sdev 0.013 
lseeks: 8 
------------------------------------------------------------------------------ 
Detailed VM Segment Stats (4096 byte pages) 
------------------------------------------------------------------------------ 
SEGMENT: 5e93 segtype: ??? 
segment flags: 
reads: 13 (0 errs) 
read times (msec): avg 1.979 min 0.957 max 5.970 sdev 1.310 
read sequences: 1 
read seq. lengths: avg 13.0 min 13 max 13 sdev 0.0 
SEGMENT: 22ed segtype: ??? 
segment flags: inode 
reads: 2 (0 errs) 
read times (msec): avg 8.102 min 7.786 max 8.418 sdev 0.316 
read sequences: 2 
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0 
SEGMENT: 5c77 segtype: persistent 
segment flags: pers defer 
reads: 1 (0 errs) 
read times (msec): avg 13.810 min 13.810 max 13.810 sdev 0.000 
read sequences: 1 
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0 

------------------------------------------------------------------------------ 
Detailed Logical Volume Stats (512 byte blocks) 
------------------------------------------------------------------------------ 
VOLUME: /dev/hd4 description: / 
reads: 5 (0 errs) 
read sizes (blks): avg 22.4 min 8 max 40 sdev 12.8 
read times (msec): avg 4.847 min 0.938 max 13.792 sdev 4.819 
read sequences: 3 
read seq. lengths: avg 37.3 min 8 max 64 sdev 22.9 
seeks: 3 (60.0%) 
seek dist (blks): init 6344, 
avg 40.0 min 8 max 72 sdev 32.0 
time to next req(msec): avg 70.473 min 0.224 max 331.020 sdev 130.364 
throughput: 151.9 KB/sec 
utilization: 0.06 

VOLUME: /dev/hd2 description: /usr 
reads: 2 (0 errs) 
read sizes (blks): avg 8.0 min 8 max 8 sdev 0.0 
read times (msec): avg 8.078 min 7.769 max 8.387 sdev 0.309 
read sequences: 2 
read seq. lengths: avg 8.0 min 8 max 8 sdev 0.0 
seeks: 2 (100.0%) 
seek dist (blks): init 608672, 
avg 16.0 min 16 max 16 sdev 0.0 
time to next req(msec): avg 162.160 min 8.497 max 315.823 sdev 153.663 
throughput: 21.7 KB/sec 
utilization: 0.04 

------------------------------------------------------------------------------ 
Detailed Physical Volume Stats (512 byte blocks) 
------------------------------------------------------------------------------ 
VOLUME: /dev/hdisk0 description: N/A 
reads: 7 (0 errs) 
read sizes (blks): avg 18.3 min 8 max 40 sdev 12.6 
read times (msec): avg 5.723 min 0.905 max 20.448 sdev 6.567 
read sequences: 5 
read seq. lengths: avg 25.6 min 8 max 64 sdev 22.9 
seeks: 5 (71.4%) 
seek dist (blks): init 4233888, 
avg 171086.0 min 8 max 684248 sdev 296274.2 
seek dist (%tot blks): 
init 48.03665, 
avg 1.94110 min 0.00009 max 7.76331 sdev 3.36145 
time to next req(msec): 
avg 50.340 min 0.226 max 315.865 sdev 108.483 
throughput: 173.6 KB/sec 
utilization: 0.10
 
原创粉丝点击