li
  当前位置:主页 > 操作系统IBM AIX > 文章内容
li
AIX 5.3主机性能评估-CPU性能评估
来源: itpub.net  作者: BTxigua    时间:2008-03-10   阅读:202  

     对于AIX主机的性能评估,我们从下面的4个方面来逐一介绍:CPUMEMORYI/O系统和网络这4个方面来描述。

 

一、CPU性能评估

    首先,我们还是先来看一下CPU的性能评估。下面先主要介绍几个看CPU性能的命令。

1vmstat

    使用vmstat来进行性能评估,该命令可获得关于系统各种资源之间的相关性能的简要信息。当然我们也主要用它来看CPU的一个负载情况。

    下面是我们调用vmstat命令的一个输出结果:

www.ixdba.net


$vmstat 1 2

System configuration: lcpu=16 mem=23552MB

kthr    memory          page                    faults          cpu   

-----     -----------      ------------------------         -----------------  -----------

 r  b   avm   fre        re  pi  po  fr     sr  cy  in   sy    cs      us sy id wa

 0  0 3091988 2741152   0   0   0   0    0   0  1849 26129 4907   8  1 88  3

 0  0 3091989 2741151   0   0   0   0    0   0  2527 32013 6561  15  2 77  6

    对上面的命令解释如下:

Kthr段显示内容

¨         r列表示可运行的内核线程平均数目,包括正在运行的线程和等待 CPU 的线程。如果这个数字大于 CPU 的数目,则表明有线程需要等待CPU

¨         b列表示处在非中断睡眠状态的进程数。包括正在等待文件系统 I/O 的线程,或由于内存装入控制而被挂起的线程。

Memory段显示内容

¨         avm列表示活动虚拟内存的页面数,每页一般4KB

¨         fre空闲的页面数,每页一般4KB

Page段显示内容

¨         re –该列无效

¨         pi 从磁盘交换到内存的交换页(调页空间)数量,4KB/页。调页空间是驻留在硬盘上的虚拟内存的一部分。当内存使用过量时,会将溢出的工作组页面存储到调页空间中(窃取页)。当进程访问一个窃取页时,就产生了一个缺页故障,而这一页页必须从调页空间中读入到内存中。

¨         po 从内存交换到磁盘的交换页数量,4KB/页。如果窃取的工作也在调页空间中不存在或者已经作了修改,则写入调页空间中。如果不被再次访问,它会留在调度空间中直到进程终止或者放弃空间。

¨         fr 根据页面替换算法每秒释放的页数。当VMM页面替换例程扫描页面帧表(Page Frame TablePFT)时,它会根据一些条件选取需要窃取的页面以补充空闲列表。该条件中包含工作页面和计算页面,释放的页面中,计算页面不产生I/O,工作页面如果数据没有发生修改,也不需要写回磁盘,也不会产生I/O

¨         sr 根据页面替换算法每秒所检查的页数。sr值比fr值高的越多,说明替换算法要查找可以替换的页面就越困难。

¨         cy 每秒页面替换代码扫描了PFT多少次。因为增加空闲列表达到maxfree值,不一定需要完全扫描PFT表,而所有vmstat输出都为整数,所以通常cy列值为0

Faults段显示内容(其实这段内容不需太多关注)

¨         in 在该时间间隔中观测到的每秒设备中断数。

¨         sy 在该时间间隔中观测到的每秒系统调用次数。

¨         cs 在该时间间隔中观测到的每秒钟上下文切换次数。

Cpu段显示内容

¨         us 列显示了用户模式所消耗的 CPU 时间。

¨         sy 列详细显示了 CPU 在系统模式所消耗的 CPU 时间。

¨         id 列显示了没有未决本地磁盘 I/O CPU 空闲或等待时间的百分比。

¨         wa 列详细显示了有未决本地磁盘 I/O CPU 空闲的时间百分比。wa 的值如果超过 25%,就表明磁盘子系统可能没有被正确平衡,或者这也可能是磁盘工作负荷很重的结果。

       如果在一个单用户系统中,us + sy时间不超过 90%,我们就不认为系统的CPU是受限制的。

如果在一个多用户系统中,us + sy时间超过 80%, 我们就认为系统的CPU是受限的。其中的进程将要花时间在运行队列中等待。响应时间和吞吐量会受损害。

检查cpu,我们主要关注报告中的4cpu列和2kthr(内核线程)列。

在上面的示例中,我们可以观察到以下几个主要的信息:

CPU IDLE比较高,比较空闲;r列为0,表明线程不存在等待;

WA值不高,说明I/O压力不大;

free值比较大,pipo0,表明内存非常富裕。空闲较多。

 

 

2sar

第二个常用的是 sar命令,但是sar会增加系统的开销。当然有些情况下,我们使用sar比较方便。

sar的输出结果与前面的基本类似,这里不再作详细的介绍,关于命令的语法,也不再作详细的介绍,我们常用的命令格式:

#sar 1 3

 

AIX jsdxh_db02 3 5 00C2C1EB4C00    10/24/07

 

System configuration: lcpu=16

 

17:52:26    %usr    %sys    %wio   %idle   physc

17:52:27      19       7       0      75    8.00

17:52:28      19       6       0      75    8.01

17:52:29      19       7       0      75    8.02

 

Average       19       7       0      75    8.01

 

在这里,sar命令输出的是一个整体的cpu使用情况的一个统计,统计分项目的内容也比较直观,通过名字就可以理解涵义。这里有一点比较方便的就是,在最后一行有一个汇总的average行,作为上述统计的一个平均。另外,补充说明一点的就是,一般来说,第一行统计信息包含了sar命令本身启动的cpu消耗,所以往往是偏高的,所以导致average值也往往是偏高一点的。当然,这不会对结果产生多大影响。

当我们有多个cpu的时候,而程序采用的是单线程,有时候会出现一种情况,我们检查发现,cpu总体的使用率不高,但是程序响应却比较慢。这里有可能就是单线程只使用了一个cpu,导致这个cpu100%占用,处理不过来,而其他的cpu却闲置。这时可以对cpu分开查询,统计每个cpu的使用情况。

#sar -P ALL 1 2

 

AIX jsdxh_db02 3 5 00C2C1EB4C00    10/24/07

 

System configuration: lcpu=16

 

18:03:30 cpu    %usr    %sys    %wio   %idle   physc

18:03:31  0        0      69       0      31    0.00

          1       50      50       0       0    1.00

          2        0       0       0     100    0.52

          3        0       0       0     100    0.48

          4        0       1       0      99    0.54

          5        0       0       0     100    0.46

          6        0       0       0     100    0.53

          7        0       0       0     100    0.47

          8        0       0       0     100    0.53

          9        0       0       0     100    0.47

          10        0       2       0      98    0.54

          11        0       0       0     100    0.46

          12       11      58       0      31    0.00

          13      100       0       0       0    1.00

          14        0       0       0     100    0.53

          15        0       0       0     100    0.47

          -       19       7       0      75    8.01

18:03:32  0        0      71       0      29    0.00

          1       50      50       0       0    1.00

          2        0       0       0     100    0.52

          3        0       0       0     100    0.48

          4        0       1       0      99    0.54

          5        0       0       0     100    0.47

          6        0       0       0     100    0.52

          7        0       0       0     100    0.47

          8        0       0       0     100    0.53

          9        0       0       0     100    0.47

          10        0       2       0      98    0.54

          11        0       0       0     100    0.46

          12       39      41       0      20    0.00

          13      100       0       0       0    1.00

          14        0       0       0     100    0.52

          15        0       0       0     100    0.47

          -       19       7       0      75    7.98

 

Average   0        0      70       0      30    0.00

          1       50      50       0       0    1.00

          2        0       0       0     100    0.52

          3        0       0       0     100    0.48

          4        0       1       0      99    0.54

          5        0       0       0     100    0.46

          6        0       0       0     100    0.53

          7        0       0       0     100    0.47

          8        0       0       0     100    0.53

          9        0       0       0     100    0.47

          10        0       2       0      98    0.54

          11        0       0       0     100    0.46

          12       28      48       0      24    0.00

          13      100       0       0       0    1.00

          14        0       0       0     100    0.52

          15        0       0       0     100    0.47

          -       19       7       0      75    8.00

 

    上面是分cpu统计的情况,结果应该也比较直观吧。

Sar还有其他一些比较特殊的使用方法,比如:

如果希望多个采样和多个报告,可为 sar 命令指定一个输出文件,这样就方便多了。将 sar 命令的标准输出数据定向到 /dev/null,并将 sar 命令作为后台进程运行。具体的命令格式为:

sar -A -o /temp/sar_result.log 5 300 > /dev/null &

    关于sar其他的一些使用方法,这里不再详述。

3iostat

    第三个可以用来使用的命令是iostat.

$ iostat -t 2 4

tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait

          0.0          0.0               0.0      0.1       99.8       0.1    

          0.0         81.0               0.0      0.1       99.9       0.0    

          0.0         40.5               0.0      0.0      100.0       0.0    

          0.0         40.5               0.0      0.1       99.1       0.8

TTY 的两列信息(tin tou)显示了由所有 TTY 设备读写的字符数

CPU 统计信息列(% user% sys% idle % iowait)提供了 CPU 的使用情况。

    注意:第一份报告为系统启动以来的一个累积值。

 

4tprof

使用tprof命令用于统计每个进程的CPU使用情况

# tprof -x sleep 30

该命令的输出结果可查看 __prof.all文件。

此命令运行30秒钟,在当前目录下创建一个名为_prof.all 的文件。30秒钟内, CPU被调度次数约为3000次。__prof.all 文件中的字段Total 为此进程调度到的CPU次数。如果进程所对应的 Total 段的值为1500,即表示该进程在3000 CPU调度中占用了1500次,或理解为使用了一半的CPU时间。tprof的输出准确地显示出哪个进程在使用CPU 时间。

在我下面的这一份示例中,可以看到,大部分的cpu时间都是被wait所占用的。这里的wait实际上是idle进程,可以表明这个系统是一个完全空闲的系统。

$ more __prof.all

        Process      PID      TID  Total Kernel   User Shared  Other

        =======      ===      ===  ===== ======   ==== ======  =====

           wait    40970    40971   2998   2998      0      0      0

           wait    32776    32777   2994   2994      0      0      0

           wait    24582    24583   2985   2985      0      0      0

           wait    16388    16389   2980   2980      0      0      0

          syncd   221254   155707     31     31      0      0      0

        caiUxOs   524540  2294015      3      0      0      3      0

           netm    73746    73747      1      1      0      0      0

       hats_nim  1671242  1220665      1      0      0      1      0

        snmpd64   598258  1245291      1      1      0      0      0

      rpc.lockd   639212  1728679      1      1      0      0      0

          tprof   704622  2277437      1      0      0      1      0

       trclogio   360524  2408625      1      1      0      0      0

          trace  1523820  2523145      1      0      0      1      0

         clinfo  1958102  2760945      1      1      0      0      0

             sh  1572938  2285709      1      1      0      0      0

        =======      ===      ===  ===== ======   ==== ======  =====

          Total                    12000  11994      0      6      0

 

 

          Process   FREQ  Total Kernel   User Shared  Other

          =======    ===  ===== ======   ==== ======  =====

             wait      4  11957  11957      0      0      0

            syncd      1     31     31      0      0      0

          caiUxOs      1      3      0      0      3      0

             netm      1      1      1      0      0      0

         hats_nim      1      1      0      0      1      0

          snmpd64      1      1      1      0      0      0

        rpc.lockd      1      1      1      0      0      0

            tprof      1      1      0      0      1      0

         trclogio      1      1      1      0      0      0

            trace      1      1      0      0      1      0

           clinfo      1      1      1      0      0      0

               sh      1      1      1      0      0      0

          =======    ===  ===== ======   ==== ======  =====

            Total     15  12000  11994      0      6      0

 

在这里,对wait进程作一点补充说明。

AIX 5L下,你用ps aux会发现有一些rootwait进程

#ps aux |head -20

USER        PID %CPU %MEM   SZ  RSS    TTY STAT    STIME  TIME COMMAND

oracle   266354  5.7  0.0 50136 27524      - A    15:40:35  0:32 oracleora92 (LOC