Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85207
  • 博文数量: 20
  • 博客积分: 627
  • 博客等级: 上士
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-11 18:03
文章分类
文章存档

2011年(20)

我的朋友

分类: 系统运维

2011-03-05 10:45:28

vmstat:报告关于内核进程,虚拟内存,磁盘,cpu的的活动状态的工具

主要有几个用法:

1.vmstat 间隔 测试数量

输出如下

kthr     memory             page              faults        cpu

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

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

0  0 26258 18280   0   0   0   7   20   0 127  227  64  1  2 96  1

其中:

kthr--内核进程的状态

--r 运行队列中的进程数,在一个稳定的工作量下,应该少于5

--b 等待队列中的进程数(等待I/O),通常情况下是接近0的.

memory--虚拟和真实内存的使用信息

--avm 活动虚拟页面,在进程运行中分配到工作段的页面空间数.

--fre 空闲列表的数量.一般不少于120,当fre少于120时,系统开始自动的kill进程去释放

       free list

page--页面活动的信息

--re 页面i/o的列表

--pi 从页面输入的页(一般不大于5)

--po 输出到页面的页

--fr 空闲的页面数(可替换的页面数)

--sr 通过页面置换算法搜索到的页面数

--cy 页面置换算法的时钟频率

faults--在取样间隔中的陷阱及中断数

--in 设备中断

--sy 系统调用中断

--cs 内核进程前后交换中断

cpu--cpu的使用率

--us 用户进程的时间

--sy 系统进程的时间

--id cpu空闲的时间

--wa 等待i/o的时间

一般us+sy 在单用户系统中不大于90,在多用户系统中不大于80.

wa时间一般不大于40.

 

 

 

 

 

 

aix CPU 性能监视

 

 

CPU 性能监视

处理单元是系统中最快的组件之一。在某一时间对单个程序来说保持 100% 的 CPU 占用率(也就是说,空闲 0%,等待 0%)超过几秒钟是相对少见的。甚至在重负载的多用户系统中,偶尔会出现一些 10 毫秒(ms)的时间段,在其结束时所有线程处于等待状态。如果监视器长时间地显示 CPU 占用率为 100%,则很有可能是某个程序陷入了死循环。即使程序“仅仅”是占用较多资源而不是崩溃了,也需要将它识别出来并进行处理。

 

vmstat 命令(CPU)

第一个要使用的工具是 vmstat 命令,该命令vmstat

# vmstat

System configuration: lcpu=8 mem=15936MB

kthr    memory              page              faults        cpu   

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

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

 1  1 894941 601322   0   0   0   2    3   0  15  862 286  0  0 99  1

avm    Active virtual pages

    avm定义为the number of virtual-memory working segment pages that have actually been touched. 此值可能会比实际物理内存的frame要大,因为一些active virtual memory可能会被写入到paging space中. 表示的是当前进程使用的stack,变量,共享内存段等类型的内存,但是不包括进程可能打开的文件所占用的内存.

fre      Size of the free list

     fre物理内存实际剩余的page数目

pi       Pages paged in from paging space

po      Pages paged out to paging space

      正常情况下pi和po不应该持续为非0值;

fr         Pages freed (page replacement).

sr         Pages scanned by page-replacement algorithm

      正常情况下fr和sr基本一致;

r    Average number of runnable kernel threads over the sampling interval. Runnable refers to threads that are ready but waiting to run and to those threads already running.

      正常情况下一般r<5

b    Average number of kernel threads placed in the VMM wait queue (awaiting resource, awaiting input/output) over the sampling interval.

wa       CPU idle time during which the system had outstanding disk/NFS I/O request(s). See detailed description above.

      b和wa正常的情况下都不大,高的wa(I/O wait)和高的b(在队列中等待的线程数目)有可能是paging in和out导致的.

工程经验

avm可以作为长期监控系统内存使用率的趋势分析,如果你有监控软件, 长时间监控avm可以给你很好的内存使用的趋势. 虽然它不代表实际系统用了多少内存,但是作为趋势判断还是非常有效的.

判断内存是否缺少内存的一个工程依据: fre少于minfree并且有持续的page in和page out出现.

其它的值:fr,sr,r,b,wa可以作为一些参考的值.

 # vmstat -s

            531921073 total address trans. faults

            298718704 page ins

             66764084 page outs

                    0 paging space page ins

                    0 paging space page outs

                    0 total reclaims

            207574145 zero filled pages faults

                32015 executable filled pages faults

             53623328 pages examined by clock

                   28 revolutions of the clock hand

             33577399 pages freed by the clock

             11549684 backtracks

                 5631 free frame waits

                    0 extend XPT waits

              5033034 pending I/O waits

            365484303 start I/Os

             10744732 iodones

           4779271208 cpu context switches

            249867457 device interrupts

            870241057 software interrupts

           3789663540 decrementer interrupts

               990224 mpc-sent interrupts

               990224 mpc-receive interrupts

              2787163 phantom interrupts

                    0 traps

          14370171283 syscalls

page ins

     Incremented for each page read in by the virtual memory manager. The count is incremented for page ins from page space and file space. Along with the page out statistic, this represents the total amount of real I/O initiated by the virtual memory manager.

page outs

      Incremented for each page written out by the virtual memory manager. The count is incremented for page outs to page space and for page outs to file space. Along with the page in statistic, this represents the total amount of real I/O initiated by the virtual memory manager.

paging space page ins

   Incremented for VMM initiated page ins from paging space only.

paging space page outs

   Incremented for VMM initiated page outs to paging space only.

工程经验

      作为page ins, page outs, paging space page ins和paging space page outs,应该不会有大量的增长.

 

# vmstat -v

              4079616 memory pages

              3870685 lruable pages

               600851 free pages

                    2 memory pools

               536705 pinned pages

                 80.0 maxpin percentage

                 20.0 minperm percentage

                 80.0 maxperm percentage

                 66.2 numperm percentage

              2566023 file pages

                  0.0 compressed percentage

                    0 compressed pages

                 66.7 numclient percentage

                 80.0 maxclient percentage

              2583370 client pages

                    0 remote pageouts scheduled

                28819 pending disk I/Os blocked with no pbuf

                    0 paging space I/Os blocked with no psbuf

                 2740 filesystem I/Os blocked with no fsbuf

                    0 client filesystem I/Os blocked with no fsbuf

               109158 external pager filesystem I/Os blocked with no fsbuf

工程经验

      numperm 和numclient是一个比较好的系统信息,表示的是当前内存中基于文件的page占的百分比. 从中可以判断当前可能的page replacement的机制. 如果numperm和numclient在minperm和maxperm/maxclient之间, 参考lru_file_repage, 如果lru_file_repage=0, 将先replace文件类型的page, 如果lru_file_repage=1, 系统会平衡计算型和文件型page的repage情况来决定

 

svmon

# svmon -G

               size      inuse       free        pin    virtual

memory      4079616    3478350     601266     536696     894957

pg space    7995392       2909

 

               work       pers       clnt

pin          536696          0          0

in use       894957          0    2583393

PageSize   PoolSize      inuse       pgsp        pin    virtual

s   4 KB          -    3400046       2909     485544     816653

m  64 KB          -       4894          0       3197       4894

上面的数值以page为单位(4K)

其中:

     Memory size: 表示物理内存的大小; Memory inuse表示当前使用了内存的大小,包括所有work和persistent类型的内存; Memory Free表示剩余的物理内存,这个值和vmstat的free list是一致的; Memory pin表示被使用的内存有多少是不能被page out(一般是系统预留的内存); Memory Virtual表示的active virtual memory,和vmstat中的avm一致.

      In use work表示的是正在使用的work类型的内存; in use pers表示的是正在使用的persistent类型的内存(JFS类型); in use clnt表示的正在使用的client类型的内存(包括remote文件系统和Enhanced JFS类型)

 

# svmon -P

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  254008 java            191578     7530     5135   194273      N     Y     N

 

     PageSize      Inuse        Pin       Pgsp    Virtual

     s   4 KB     191204       7530       5120     193861

     m  64 KB        374          0         15        412

 

    Vsid      Esid Type Description              PSize  Inuse   Pin Pgsp Virtual

   344e9         3 work working storage              s  65503     0  636 65525

   244ed         4 work working storage              s  65001     0  768 65536

   204ec         5 work working storage              s  48632     0 3646 50930

       0         0 work kernel                       s  11399  7468   19 11417

   330ad         d work shared library text          m    374     0   15   412

   457f8         - clnt /dev/hd10opt:40966           s    256     0    -     -

   284ee         f work working storage              s    192     0    9   213

   3c4eb         - work                              s    171    59   39   205

   384ea         2 work process private              s     32     3    3    35

     3c4         1 clnt code,/dev/hd10opt:47099      s     18     0    -     -

   6863e         - clnt /dev/hd10opt:52836           s      0     0    -     -

   30628         - clnt /dev/hd10opt:50981           s      0     0    -     -

……

Vsid

      Indicates the virtual segment ID. Identifies a unique segment in the VMM

Esid

      Indicates the effective segment ID. The Esid is only valid when the segment belongs to the address space of the process.

列出内存占用率排名前15名的进程和相关信息.

# svmon -Pt15 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}'

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

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  254008 java            191539     7530    12956   194382      N     Y     N

  319610 dsmc             48382     7476     7361    28925      N     Y     N

  258184 dsmserv          31846     7526     8294    34638      Y     Y     N

  336062 kulagent         14134     7490     1882    15755      Y     Y     N

  217194 hostmibd64       14115     7471     1884    15590      Y     N     N

  344078 kuma610          14024     7499     3360    17020      Y     Y     N

  286776 kuxagent         13986     7488     2536    16296      Y     Y     N

  155768 IBM.CSMAgentR    13445     7487      675    13843      N     Y     N

  184420 snmpmibd64       13224     7471     1929    14749      Y     N     N

  458810 stat_daemon      12921     7471     1922    14618      Y     N     N

  417992 svmon_back.64    12746     7471     1813    14341      Y     N     N

  352382 kux_vmstat       12724     7471     1913    14428      Y     N     N

  340132 ifstat           12724     7471     1876    14393      Y     N     N

  127050 shlap64          12706     7471     1880    14367      Y     N     N

  413938 nfs_stat         12698     7471     1844    14332      Y     N     N

-t Count

     Displays memory usage statistics for the top Count object to be printed

64-bit

     Indicates if the process is a 64 bit process (Y) or a 32 bit process (N)

Mthrd

      Indicates if the process is multi-threaded (Y) or not (N).

16MB

      Indicates the 16MB page status of the process. "M" stands for mandatory, "Y" means that the process uses or has used 16MB page segments and "N" means that the process does not use 16MB pages.

工程经验

   svmon –P是一个很好的监控单独进程内存利用率的命令. 它也可以用来作为检查程序是否有内存泄漏的一个重要工具.

ps

#ps v 254008

    PID    TTY STAT  TIME PGIN  SIZE   RSS   LIM  TSIZ   TRS %CPU %MEM COMMAND

 254008      - A    193:26 50425 729316 717376 32768    39    72  0.0 29.0 /opt/IBM

SIZE(单位1KB)

    (v flag) The virtual size of the data section of the process (in 1KB units). 被分配的working segment pages, size大小的计算公式: 729316=(65536+65525+51020+213+35)*4, 后者是svmon输出的结果(Virtual),包括物理内存和paging space.

RSS

     (v flag) The real-memory (resident set) size of the process (in 1KB units).包括所有在内存中的的working segment和code segment. Rss大小的计算公式: 717376=(65111+65001+48991+191+32+18)*4, 后者是svmon输出中inuse对应的值.

TRS

     (v flag) The size of resident-set (real memory) of text. TRS的计算公式: 72=18*4,表示的是程序段在内存中的大小

计算公式

SIZE = 4 * Virtual of (work lib data + work private)

RSS = 4 * Inuse of (work lib data + work private + pers code)

TRS = 4 * Inuse of (pers code)

# svmon -P 254008|more

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

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  254008 java            191539     7530    12956   194382      N     Y     N

 

     PageSize      Inuse        Pin       Pgsp    Virtual

     s   4 KB     191145       7530      12941     193951

     m  64 KB        394          0         15        431

 

    Vsid      Esid Type Description              PSize  Inuse   Pin Pgsp Virtual

   244ed         4 work working storage              s  65111     0  697 65536

   344e9         3 work working storage              s  65001     0 5434 65525

   204ec         5 work working storage              s  48991     0 6719 51020

       0         0 work kernel                       s  11397  7468   21 11417

   330ad         d work unused segment               m    394     0   15   431

   114ed         - clnt /dev/hd10opt:40960           s    238     0    -     -

   284ee         f work working storage              s    191     0   12   213

   3c4eb         - work                              s    162    59   55   205

   384ea         2 work process private              s     32     3    3    35

     3c4         1 clnt code,/dev/hd10opt:47099      s     18     0    -     -

    4725         - clnt /dev/hd10opt:53347           s      2     0    -     -

可迅速提供关于各种系统资源和与之相关的性能问题的简要信息。vmstat 命令报告关于内核线程的统计信息,包括处于运行和等待队列中的、内存中的、页面调度中的、磁盘中的、中断、系统调用、上下文切换和 CPU 活动的内核线程。所报告的 CPU 活动是用户方式、系统方式、空闲时间和等待磁盘 I/O 的百分比细目分类。

 

注:

如果使用 vmstat 命令时不带任何选项,或者只带有间隔时间和任意的计数参数,例如 vmstat 2 10;那么第一行数字为自系统重新引导以来的平均值。

作为一个 CPU 监视器,vmstat 命令优于 iostat 命令,因为 vmstat 命令是滚动的,使得它的每报告一行的输出更容易扫描,并且如果有很多磁盘连接到系统中,由此所涉及的开销更少。下面的示例可以帮助您识别一个程序失控时或 CPU 过度密集以至于不能在一个多用户环境中运行时的情况。

 

# vmstat 2

kthr     memory             page              faults        cpu

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

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

 1  0 22478  1677   0   0   0   0    0   0 188 1380 157 57 32  0 10

 1  0 22506  1609   0   0   0   0    0   0 214 1476 186 48 37  0 16

 0  0 22498  1582   0   0   0   0    0   0 248 1470 226 55 36  0  9

 

 2  0 22534  1465   0   0   0   0    0   0 238  903 239 77 23  0  0

 2  0 22534  1445   0   0   0   0    0   0 209 1142 205 72 28  0  0

 2  0 22534  1426   0   0   0   0    0   0 189 1220 212 74 26  0  0

 3  0 22534  1410   0   0   0   0    0   0 255 1704 268 70 30  0  0

 2  1 22557  1365   0   0   0   0    0   0 383  977 216 72 28  0  0

 

 2  0 22541  1356   0   0   0   0    0   0 237 1418 209 63 33  0  4

 1  0 22524  1350   0   0   0   0    0   0 241 1348 179 52 32  0 16

 1  0 22546  1293   0   0   0   0    0   0 217 1473 180 51 35  0 14

此输出显示了在一个死循环中将程序引入到一个繁忙的多用户系统中所带来的效果。头三个报告(已删除摘要)表明系统平衡在 50-55% 的用户、30-35% 的系统和 10-15% 的 I/O 等待处。当循环程序开始运行,所有可用的 CPU 周期都被耗用。因为循环程序不进行 I/O,所以它可以占有前面因为 I/O 等待而未用过的所有周期。更糟的是,这代表当一个有用进程放弃 CPU 时,始终有一个进程准备接管 CPU。因为循环程序的优先级与所有其他前台进程一样,所以当另一个进程变得可分派时它也没必要一定得放弃 CPU。该程序运行大约 10 秒钟(五个报告),然后由 vmstat 命令报告的活动恢复到较正常的模式。

 

最佳利用是让 CPU 在 100% 的时间中工作。这适用于单用户系统的情况,不需要共享 CPU。总的来说,如果 us + sy 时间低于 90%,则不认为单用户系统是 CPU 受限制的。但是,如果在一个多用户系统中 us + sy 时间超过 80%,则进程可能要花时间在运行队列中等待。响应时间和吞吐量会受损害。

 

要检查 CPU 是否是瓶颈,考虑 vmstat 报告中的四个 cpu 列和两个 kthr(内核线程)列。查看故障列也是值得的:

 

cpu

在该时间间隔内使用 CPU 时间的百分比细分。cpu 列如下:

 

us

us 列显示了用户方式下所花费 CPU 时间的百分比。UNIX® 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。

 

sy

sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其他需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。

 

id

id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。如果没有线程可以执行(运行队列为空),系统分派一个叫做 wait 的线程,也称为 idle kproc。在一个 SMP 系统中,每个处理器都有一个 wait 线程可分派。由 ps 命令(带有 -k 或 -g 0选项)生成的报告将它确定为 kproc 或 wait。如果 ps 报告显示这个线程的总计时间较高,这表明存在重要的时间段,其中没有其他线程准备在 CPU 上运行或等待执行。系统因此大部分时间空闲和等待新任务。

 

wa

wa 列详细显示了暂挂本地磁盘 I/O 和 NFS 加载的磁盘的 CPU 空闲百分比。如果在 wait 运行时至少有一个未完成的磁盘 I/O,该时间就归为 I/O 等待时间。除非进程使用异常 I/O,否则对磁盘的 I/O 请求会导致调用的进程阻塞(或睡眠),直到请求完成为止。一旦进程的 I/O 请求完成,该进程就放入运行队列中。如果 I/O 很快完成,该进程可以使用更多的 CPU 时间。

 

超过 25% 的 wa 的值可以表示磁盘子系统可能没有被正确平衡,或者这也可能是磁盘密集工作负载的结果。

 

关于对 wa 进行的更改的信息,请参阅『等待 I/O 时间报告』。

 

kthr

每秒钟在采样间隔时间上对各种队列中的内核线程数求得的平均值。kthr 列如下:

 

r

可运行的内核线程平均数,包括正在运行的线程和正在等待 CPU 的线程。如果这个数字大于 CPU 的数目,至少有一个线程要等待 CPU,等待 CPU 的线程越多,越有可能对性能产生影响。

 

b

每秒 VMM 等待队列中的内核线程平均数。这包括正在等待文件系统 I/O 的线程,或由于内存装入控制而暂挂的线程。

 

如果进程由于内存装入控制而暂挂,在 vmstat 报告中的阻塞列(b)表明线程数目增加,而不是运行队列数目增加。

 

p

对于 vmstat -I,是每秒等待原始设备 I/O 的线程数目。等待文件系统 I/O的线程不包括在这里。

 

故障

关于进程控制的信息,如陷阱和中断率。故障列如下:

 

in

在某一时间间隔中观测到的每秒设备中断数。其他信息可在『用 vmstat 命令评估磁盘性能』中找到。

 

sy

在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。但是通常来讲,在一个单处理器系统上当 sy 列增大到超过每秒钟 10000 个调用时,则要求进行进一步调查(在一个 SMP 系统上,这个数字为每个处理器每秒钟 10000 个调用)。一个原因可能是“轮询”子例程,像 select() 子例程。对这一列,建议进行一个基准评估,给出正常 sy 值的计数。

 

cs

在某一时间间隔中观测到的每秒钟上下文切换次数。物理 CPU 资源细分为每个 10 毫秒的逻辑时间片。假设一个线程被调度运行,它将一直运行直到它的时间片用完、直到被抢先或直到它自愿放弃 CPU 控制权。当给予另一个线程 CPU 控制权时,必须保存前一个线程的上下文或工作环境,并且必须装入当前线程的上下文。操作系统有一个很有效的上下文切换过程,所以每次切换并不耗费资源。任何上下文切换的显著增加,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

 

iostat 命令

iostat 命令是获得第一印象的最快方法,不论系统是否存在磁盘 I/O 约束的性能问题(参阅『用 iostat 命令评估磁盘性能』)。这个工具也报告 CPU 统计信息。

 

下面的示例显示了 iostat 命令输出的一部分。第一节显示了自从系统启动以来的统计信息摘要。

 

# iostat -t 2 6

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

          0.0          0.8               8.4      2.6       88.5       0.5

          0.0         80.2               4.5      3.0       92.1       0.5

          0.0         40.5               7.0      4.0       89.0       0.0

          0.0         40.5               9.0      2.5       88.5       0.0

          0.0         40.5               7.5      1.0       91.5       0.0

          0.0         40.5              10.0      3.5       80.5       6.0

CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用故障。该信息也在 vmstat 命令输出的标号为 us、sy、id 和 wa 的各列中报告。要获得各值的更为详细的解释,请参阅『vmstat 命令』。也请注意在『等待 I/O 时间报告』中描述的对 %iowait 所做的更改。

 

sar 命令

sar 命令收集关于系统的统计数据。尽管可以用它来收集一些关于系统性能的有用数据,但 sar 命令会增加系统负载,如果采样频率较高就会加剧预先存在的性能问题。但与记帐包相比,sar 命令的干扰更小。系统维护了一系列系统活动计数器,用来记录各种活动并提供 sar 命令报告的数据。sar 命令不会导致这些计数器被更新或使用;不论 sar 命令是否运行这都会自动进行。根据指定给 sar 命令的采样速率和采样次数,它仅仅从这些计数器中提取数据并保存下来。

 

通过它的许多选项,sar 命令提供了排队、页面调度、TTY 和许多其他的统计信息。sar 命令的一个重要功能是它会报告系统级(所有处理器的综合)的 CPU 统计信息(对一些结果取平均值,以百分比表示,对其他求和),或者报告每个独立处理器的统计信息。所以这个命令在 SMP 系统上特别有用。

 

有三种情况可以使用 sar 命令:

 

实时采样和显示

要收集并立即显示系统统计报告,使用下列命令:

 

# sar -u 2 5

 

AIX aixhost 2 5 00049FDF4C00    02/21/04

 

18:11:12    %usr    %sys    %wio   %idle

18:11:14       4       6       0      91

18:11:16       2       7       0      91

18:11:18       3       6       0      92

18:11:20       2       7       0      92

18:11:22       2       7       1      90

                                        

平均值         2       6       0      91

 

这一示例来自于一个单用户工作站,显示了 CPU 使用率。

 

显示以前捕获的数据

-o 和 -f 选项(对用户给定的数据文件中进行读写)允许您在两个独立步骤中将机器的行为可视化。在问题再现期间这些操作消耗很少的资源。通过传送文件您可以使用单独的一台机器来分析数据,因为收集的二进制文件保留了 sar 命令所需的所有数据。

 

# sar -o /tmp/sar.out 2 5 > /dev/null

上面的命令在后台运行 sar 命令,以两秒的时间间隔收集 5 个区间的系统活动数据,并将(未格式化的)sar 数据存储在 /tmp/sar.out 文件中。对标准输出使用重定向可以避免屏幕输出。

 

下列命令从文件中提取 CPU 信息并将格式化的报告输出到标准输出中:

 

# sar -f/tmp/sar.out

 

AIX aixhost 2 5 00049FDF4C00    02/21/04

 

18:10:18    %usr    %sys    %wio   %idle

18:10:20       9       2       0      88

18:10:22      13      10       0      76

18:10:24      37       4       0      59

18:10:26       8       2       0      90

18:10:28      20       3       0      77

 

平均值        18       4       0      78

捕获的二进制数据文件中保留了报告所需的所有信息。因此可以调查每个可能的 sar 报告。这也允许在一个单处理器系统上显示 SMP 系统的处理器特定的信息。

 

通过守护程序 cron 的系统活动记帐

sar 命令调用一个叫做 sadc 的进程来访问系统数据。构造两个 shell 脚本(/usr/lib/sa/sa1 和 /usr/lib/sa/sa2),用守护程序 cron 运行这两个脚本,以提供每天的统计信息和报告。在 /var/spool/cron/crontabs/adm crontab 文件中包含了(但注释掉了)样本节,以指定守护程序 cron 应该何时运行 shell 脚本。

 

下面几行显示了一个修改过的管理员用户的 crontab。只除去了数据收集的注释字符:

 

#=================================================================

#      SYSTEM ACTIVITY REPORTS

#  8am-5pm activity reports every 20 mins during weekdays.

#  activity reports every an hour on Saturday and Sunday.

#  6pm-7am activity reports every an hour during weekdays.

#  Daily summary prepared at 18:05.

#=================================================================

0 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &

0 * * * 0,6 /usr/lib/sa/sa1 &

0 18-7 * * 1-5 /usr/lib/sa/sa1 &

5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaqvm &

#=================================================================

以这种方式收集数据有助于表征在一段时期中系统的使用情况并确定使用高峰时间。

 

有用的 CPU 选项

sar 命令中与 CPU 相关的最有用选项有:

 

sar -P

-P 选项报告指定处理器的每处理器统计信息。通过指定 ALL 关键字,可以报告每个单独的处理器统计信息和所有处理器的平均值。在指定要报告统计信息的标志中,只有 -a、-c、-m、-u 和 -w 这几个标志与 -P 标志一起使用才有意义的。

 

下面的示例显示了当一个 CPU 受限程序在 0 号处理器上运行时的每处理器统计信息:

 

# sar -P ALL 2 3

 

AIX aixsmphost 2 5 00049FDF4D01    02/22/04

 

17:30:50 cpu    %usr    %sys    %wio   %idle

17:30:52 0        8      92       0       0

          1        0       4       0     96

          2        0       1       0      99

          3        0       0       0    100

         -       2      24       0      74

17:30:54 0       12      88       0       0

         1        0       3       0      97

          2        0       1       0      99

          3        0       0       0    100

         -       3      23       0      74

17:30:56 0       11      89       0       0

         1        0       3       0      97

          2        0       0       0     100

          3        0       0       0    100

         -       3      23       0      74

 

平均值   0       10      90       0      0

          1        0       4       0     96

          2        0       1       0      99

          3        0       0       0    100

          -        3      24       0     74

每节的最后一行在 cpu 一列中以一个短划线(-)开始,是所有处理器的平均值。只有当使用 -P ALL 选项时才会显示一个平均值(-)行。如果指定了处理器,这一行将被除去。最后一节标记了平均值而不是一个时间戳,保留了所有节中处理器特定行的平均值。

 

下列示例显示了此时 vmstat 的输出:

 

# vmstat 2 5

kthr     内存               页面              故障          cpu

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

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

 0  0  255636 16054   0   0   0   0    0   0   116  266   5   0  1  99 0

 1  1  255733 15931   0   0   0   0    0   0   476  50781 35  2  27  70 0

 1  1  255733 15930   0   0   0   0    0   0   476  49437 27  2  24 74 0

 1  1  255733 15930   0   0   0   0    0   0   473  48923 31  3  23 74 0

 1  1  255733 15930   0   0   0   0    0   0   466  49383 27  3  23 74 0

第一个有编号的行是系统启动以来的摘要。第二行反映了 sar 命令的启动,这些报告可通过第三行进行比较。vmstat 命令只能显示所有处理器的 CPU 平均利用率。这与 sar 命令的 CPU 利用率输出中的虚线(-)行相当。

 

sar -u

该命令显示了 CPU 利用率。如果不指定其他标志,这就是缺省标志。它显示的信息与 vmstat 或 iostat 命令的 CPU 统计信息一样。

 

在下列示例中,启动了一个复制命令:

 

# sar -u -P ALL 1 5

 

AIX aixsmphost 2 5 00049FDF4D01    02/22/04

 

13:33:42 cpu    %usr    %sys    %wio   %idle

13:33:43  0        0       0       0     100

          1        0       0       0     100

          2        0       0       0     100

          3        0       0       0    100

          -        0       0       0     100

13:33:44  0        2      66       0      32

          1        0       1       0      99

          2        0       0       0     100

          3        0       1       0      99

          -        0      17       0      82

13:33:45  0        1      52      44       3

          1        0       1       0      99

          2        0       4       0      96

          3        0       0       0    100

          -        0      14      11      74

13:33:46  0        0       8      91       1

          1        0       0       0     100

          2        0       0       0     100

          3        0       1       0      99

          -        0       2      23      75

13:33:47  0        0       7      93       0

          1        0       0       0     100

          2        0       1       0      99

          3        0       0       0    100

          -        0       2      23      75

 

平均值    0        1      27      46      27

          1        0       0       0     100

          2        0       1       0      99

          3        0       0       0    100

          -        0       7      11      81

cp 命令在 0 号处理器上工作,其他三个处理器空闲。有关更多信息,请参阅『等待 I/O 时间报告』。

 

sar -c

-c 选项显示了系统调用率。

 

# sar -c 1 3

19:28:25 scall/s sread/s swrit/s  fork/s  exec/s rchar/s wchar/s

19:28:26     134      36       1    0.00    0.00 2691306    1517

19:28:27      46      34       1    0.00    0.00 2716922    1531

19:28:28      46      34       1    0.00    0.00 2716922    1531

 

平均值        75      35       1    0.00    0.00 2708329    1527

虽然 vmstat 命令也显示系统调用率,如果这些系统调用是 read()、write()、fork()、exec() 和其他调用,sar 命令也可以显示它们。请特别注意 fork/s 一列。如果它较高,则可能需要使用记帐实用程序(如 trace 命令或 tprof 命令)进行进一步调查。

 

sar -q

-q 选项显示了运行队列长度和交换队列长度。

 

# sar -q 5 3

 

19:31:42 runq-sz %runocc swpq-sz %swpocc

19:31:47     1.0     100     1.0     100

19:31:52     2.0     100     1.0     100

19:31:57     1.0     100     1.0     100

 

平均值       1.3      95     1.0      95

runq-sz

每秒钟可运行的平均线程数和运行队列被占用的时间百分比(% 字段容易出错)。

swpq-sz

VMM 等待队列中的平均线程数和交换队列被占用的时间百分比。(% 字段容易出错。)

-q 选项可以指出您系统中是否运行太多的作业(runq-sz),或有一个潜在的页面调度瓶颈。在一个高度事务性的系统中,例如企业资源规划(ERP),运行队列可能有几百个,因为每项事务只使用少量的 CPU 时间。如果页面调度是问题所在,则运行 vmstat 命令。高的 I/O 等待表明存在严重的磁盘争用活动,或由于内存不足而产生过多的页面调度。

阅读(4338) | 评论(0) | 转发(0) |
0

上一篇:AIX 系统参数配置

下一篇:AIX学习笔记

给主人留下些什么吧!~~