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 等待表明存在严重的磁盘争用活动,或由于内存不足而产生过多的页面调度。