AIX系统CPU监控与评估
扫描二维码
随时随地手机看文章
AIX系统CPU监控与评估... 2
一, VMSTAT命令(CPU) 2
1.1 cpu. 3
1.2 kthr(内核等待) 3
1.3 faults故障... 4
1.4 memory(内存) 4
1.5 page磁盘交换... 5
二, iostat命令... 5
三, Sar命令... 5
3.1 实时采样和显示... 6
3.2 sar –P(报告每个处理器的信息) 6
3.3 sar –c (系统调用率) 7
3.4 sar –q(运行队列长度和交换队列长度) 8
四, tprof监视进程的cpu使用... 9
4.1 实时或在线方式... 9
五, ps命令... 10
5.1 显示占用cpu最高的进程... 10
六, 小结... 11
AIX系统CPU监控与评估
中央处理器是系统最快的组件之一. 在某一个时间单位内对单个程序来说保持100%的CPU占用率(也就是说空闲0%, 等待0%)超过几秒钟是很少见的. 如果监视器长时间地显示CPU占用率为100%, 则很有可能是某个程序陷入了死循环. 即使程序仅仅是占用较多资源而不是崩溃了, 也需要将他们识别出来并进行处理.
一, VMSTAT命令(CPU)
该命令可迅速提供关于各种系统资源和与之相关的性能问题的简要信息.
Vmstat命令报告关于内核线程的统计信息, 包括处于运行和等待队列中的, 内存中的, 页面调度中的, 磁盘中的, 中断,系统调用, 上下文切换和CPU活动的内核线程. 所报告的CPU活动是用户方式, 系统方式, 空闲时间和等待磁盘IO的百分比细目分类.
作为一个cpu监视器, vmstat命令优于iostat命令, 因为vmstat命令是滚动的, 使得它的每一行报告的输出更容易扫描. 并且如果有很多磁盘链接到系统中, 由此所涉及到的开销更少.
# vmstat 2
System configuration: lcpu=8 mem=8192MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 1596212 186517 0 0 0 0 0 0 157 2242 757 5 0 95 0
1 0 1602824 179905 0 0 0 0 0 0 276 8731 986 23 1 76 0
1 0 1609397 173332 0 0 0 0 0 0 298 5696 1118 27 1 72 0
1 0 1609407 173322 0 0 0 0 0 0 276 5630 1046 23 1 77 0
1 0 1609593 173136 0 0 0 0 0 0 1209 10754 3699 10 3 87 0
1 0 1609630 173099 0 0 0 0 0 0 637 8595 2061 26 1 72 0
0 0 1596477 186252 0 0 0 0 0 0 330 3439 1200 8 1 91 0
1 0 1603954 178775 0 0 0 0 0 0 227 8673 897 26 1 74 0
1 0 1609455 173274 0 0 0 0 0 0 311 4853 1116 20 1 79 0
2 0 1609444 173285 0 0 0 0 0 0 268 5253 1078 21 1 78 0
1 1 1609464 173265 0 0 0 0 0 0 1038 8405 3346 8 3 89 1
1 0 1609469 173260 0 0 0 0 0 0 533 6095 1857 22 1 77 0
1 0 1596188 186541 0 0 0 0 0 0 201 28445 910 23 1 75 0
1 0 1596187 186542 0 0 0 0 0 0 166 45170 767 24 1 75 0
1 0 1596378 186351 0 0 0 0 0 0 127 60695 708 24 2 75 0
1 0 1596190 186539 0 0 0 0 0 0 171 53852 808 24 2 75 0
1 0 1596329 186400 0 0 0 0 0 0 704 5027 1856 4 1 95 0
0 0 1596357 186372 0 0 0 0 0 0 841 6574 2227 3 1 96 0
最佳利用是让CPU在100%的时间中工作. 这适用于单用户系统的情况, 不需要共享CPU. 总的来说, 如果us+sy时间低于90%, 则不认为单用户系统是CPU受限制的. 但是, 如果一个多用户系统中us+sy时间超过80%, 则进程可能要花时间在运行队列中等待. 响应时间和吞吐量会受损害.
要检查CPU是否是瓶颈, 考虑vmstat报告中的四个cpu列和两个kthr(内核线程)列. 查看故障列也是值得的.
1.1 cpu
在给定的时间间隔内使用cpu时间的百分比细分.
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 1596212 186517 0 0 0 0 0 0 157 2242 757 5 0 95 0
1 0 1602824 179905 0 0 0 0 0 0 276 8731 986 23 1 76 0
1 0 1609397 173332 0 0 0 0 0 0 298 5696 1118 27 1 72 0
Us:
用户方式下所花费的cpu时间百分比. 进程可以在用户方式下执行, 也可以在系统(内核)方式下执行. 当在用户方式下时, 进程在它自己的应用程序代码中执行, 不需要内核资源来进行计算, 管理内存或设置变量.
Sy:
系统方式下执行一个进程所花时间的百分比. 这包括内核进程(kernel procedures)和其他需要访问内核资源的进程所消耗的cpu资源.
Id:
没有未完成的磁盘io时cpu空闲或等待的时间百分比. 由ps命令(带有-k或-g 0参数)生成的报告将它确定为kproc或wait.
Wa:
暂挂本地磁盘io和NFS加载的磁盘的cpu空闲百分比. 如果在cpu等待时至少有一个未完成的磁盘io, 该时间就归为IO等待时间. 除非进程使用异常IO, 否则对磁盘的io请求会导致调用的进程阻塞, 知道请求完成为止.
超过25%的wa值可以表示磁盘子系统没有被正确平衡, 或者这也可能是磁盘密集工作负载的结果.
1.2 kthr(内核等待)
在采样时间间隔上对各种队列中的内核线程数求的每秒平均值.
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 1596212 186517 0 0 0 0 0 0 157 2242 757 5 0 95 0
1 0 1602824 179905 0 0 0 0 0 0 276 8731 986 23 1 76 0
1 0 1609397 173332 0 0 0 0 0 0 298 5696 1118 27 1 72 0
R:
可运行的内核线程平均数, 包括正在运行的线程和正在等待cpu的线程, 如果这个数字大于cpu的数目, 至少有一个线程要等待cpu, 等待cpu的线程越多, 越有可能对性能产生影响.
B:
每秒在等待队列中的内核线程数, 这包括正在等待文件系统io的线程或者由于内存装入控制而暂挂的线程.
P:
对于vmstat –I, 是每秒等待原始设备IO的线程数目. 等待文件系统IO的线程不包括在这里.
1.3 faults故障
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 1596212 186517 0 0 0 0 0 0 157 2242 757 5 0 95 0
1 0 1602824 179905 0 0 0 0 0 0 276 8731 986 23 1 76 0
In:
每秒设备中断数
Sy:
每秒系统调用次数.
Cs:
每秒钟的上下文切换次数. 物理cpu资源细分为10毫秒的逻辑时间片, 假设一个线程调度被运行, 它将一直运行直到它的时间片用完,或被抢先,或者自愿放弃cpu控制权. 当给予另一个线程cpu控制权时, 必须保存前一个线程的上下文或工作环境, 并且必须装入当前线程的上下文. 操作系统有一个很有效的上下文切换过程, 所以每次切换并不耗资源. 任何上下文切换的显著增加, 如当cs比磁盘io和网络信息包速率高很多, 都应进行进一步调查.
1.4 memory(内存)
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 1596212 186517 0 0 0 0 0 0 157 2242 757 5 0 95 0
1 0 1602824 179905 0 0 0 0 0 0 276 8731 986 23 1 76 0
1 0 1609397 173332 0 0 0 0 0 0 298 5696 1118 27 1 72 0
Avm列表表示活动虚拟内存的页面数, 每页一般4KB
Fre表示空闲的页面数.
1.5 page磁盘交换
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 1596212 186517 0 0 0 0 0 0 157 2242 757 5 0 95 0
1 0 1602824 179905 0 0 0 0 0 0 276 8731 986 23 1 76 0
1 0 1609397 173332 0 0 0 0 0 0 298 5696 1118 27 1 72 0
Re: 该列无效
Pi: 从磁盘交换到内存的交换页(调页空间)数量, 4KB/页. 当进程访问一个交换页时就产生一个缺页故障.
Po: 从内存交换到磁盘的交换页数量, 4KB/页. 如果写入的交换页在交换区间内不存在或者已经做了修改, 则写入交换区间. 如果不被再次访问, 则会留在调度空间中直到进程终止或者放弃空间.
Fr: 根据页面替换算法每秒释放的页数. VMM的页面替换例程会定时扫描页面祯表, 以释放一些长时间没有访问的数据页到空闲列表. 在这个过程中, 计算页面不会产生IO, 工作页面如果数据没有发生修改, 也不需要写回磁盘, 不会产生IO.
Sr: 为了释放页面扫描的页数. Sr值如果比fr值高很多, 说明替换算法要查找可疑替换的页面越困难.
Cy: 每秒页面替换代码扫描了PFT多少次, 因为增加空闲列表达到maxfree值, 不一定需要完全扫描PFT表, 就是说这个值一般会小于1, 而所有vmstat输出都为整数, 所以cy通常为0.
二, iostat命令
Iostat命令是活的第一印象的最快方法, 这个工具也报告cpu统计信息.
# iostat -t 2 5
System configuration: lcpu=8
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 16.0 1.0 0.3 98.6 0.1
0.0 70.0 6.1 0.3 93.6 0.0
0.0 34.5 5.5 0.4 94.0 0.1
0.0 35.7 1.4 0.3 98.3 0.0
0.0 33.0 3.7 0.4 95.9 0.0
三, Sar命令
Sar命令收集关于系统的统计数据.
Sar命令会增加系统负载, 如果采样频率较高就会加剧预先存在的性能问题.
Aix系统维护了一系列系统活动计数器, 用来记录各种活动并提供sar命令报告的数据. Sar命令不会导致这些计数器被更新或使用, 不论sar命令是否运行这些计数器都会持续工作. 根据指定的sar命令的采样速率和采样次数, 它仅仅从这些计数器中提取数据并保存下来.
通过指定参数, sar命令提供了排队, 页面调度, TTY和许多其他的统计信息. Sar命令的一个重要功能是它会报告系统级(所有处理器的综合)的cpu统计信息(对一些结果取平均值, 以百分比表示, 对其他求和), 或者报告每个独立处理器的统计信息.
3.1 实时采样和显示
# sar -u 1 10
AIX SISDB_B 3 5 00C674AF4C00 07/14/09
System configuration: lcpu=8 mode=Capped
16:24:44 %usr %sys %wio %idle physc
16:24:45 17 5 2 76 4.00
16:24:46 22 5 1 72 4.03
16:24:47 37 6 1 56 3.98
16:24:48 19 4 3 74 3.94
16:24:49 16 4 1 79 4.05
16:24:50 27 5 2 67 3.97
16:24:51 14 4 1 80 4.00
16:24:52 14 4 1 80 4.01
16:24:53 16 4 1 79 3.99
16:24:54 4 1 0 95 3.98
Average 19 4 1 76 4.00
报告每个处理器或整个系统的统计信息. 当与-P标志一起使用时, 为每个指定的处理器提供此信息; 否则, 只在系统范围内提供此信息. 因为-u标志信息以百分比表示, 所以系统范围信息只是每个处理器统计信息的平均值.
3.2 sar –P(报告每个处理器的信息)
-P选项报告指定处理器的每个处理器统计信息. 通过指定ALL关键字, 可以报告每个单独的处理器统计信息和所有处理器的平均值.
# sar -uP ALL 3 2
AIX SISDB_B 3 5 00C674AF4C00 07/14/09
System configuration: lcpu=8 mode=Capped
16:33:32 cpu %usr %sys %wio %idle physc
16:33:35 0 8 2 1 89 0.54
1 0 0 0 100 0.45
2 5 3 0 93 0.53
3 0 0 0 100 0.47
4 18 3 1 78 0.57
5 0 0 0 100 0.42
6 8 3 1 88 0.54
7 0 0 0 100 0.46
- 6 2 0 93 3.99
16:33:38 0 23 3 0 74 0.59
1 0 0 0 100 0.41
2 8 2 1 89 0.54
3 0 0 0 100 0.46
4 2 2 0 96 0.52
5 0 0 0 100 0.48
6 4 2 0 94 0.53
7 0 0 0 100 0.47
- 5 1 0 93 4.00
Average 0 16 3 0 81 0.57
1 0 0 0 100 0.43
2 6 3 0 91 0.53
3 0 0 0 100 0.47
4 11 3 0 86 0.55
5 0 0 0 100 0.45
6 6 2 0 91 0.53
7 0 0 0 100 0.46
- 5 2 0 93 4.00
每节的最后一行在cpu一列中以一个短线(-)开始, 是所有处理器的平均值. 只有当使用-P ALL选项时才会显示一个平均值.
3.3 sar –c (系统调用率)
-c选项显示了系统调用率.
# sar -c 1 3
AIX SISDB_B 3 5 00C674AF4C00 07/14/09
System configuration: lcpu=8 mode=Capped
16:38:47 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s
16:38:48 8792 681 353 2.00 2.00 2364515 49391
16:38:49 7785 281 276 0.00 0.00 68447 30005
16:38:50 8997 392 392 0.00 0.00 51992 58212
Average 8525 451 340 0.67 0.67 828318 45869
-c选项报告系统调用, 当与-P标志一起使用时, 只为每个指定处理器提供此信息; 否则在系统范围内提供此信息. 将显示以下数值:
栏
说明
Scall/S
报告系统调用总数
Sread/S
读系统调用总数
Swrite/S
写系统调用总数
Fork/S
Fork系统调用总数
Exec/S
Exec系统调用总数
Rchar/S
读系统调用传送的字符总数
Wchar/S
写系统调用传送的字符总数
Vmstat也显示系统调用率, 但如果这些系统调用时read(), write(), fork(), exec()和其他调用, sar命令也可以显示他们. 请特别注意fork/s这一列. 如果它较高, 可能需要使用记账实用程序(如trace命令或tprof命令)进行进一步调查.
3.4 sar –q(运行队列长度和交换队列长度)
# sar -q 1 10
AIX SISDB_B 3 5 00C674AF4C00 07/14/09
System configuration: lcpu=8 mode=Capped
16:47:19 runq-sz %runocc swpq-sz %swpocc
16:47:20 1.0 100
16:47:21 2.0 100
16:47:22 1.0 100
16:47:23 1.0 100
16:47:24 1.0 100
16:47:25
16:47:26
16:47:27 1.0 100
16:47:28 1.0 100
16:47:29
Average 1.1 70
栏
说明
Runq-sz
平均内核线程数
%runocc
运行队列占用的时间百分比
Swpq-sz
等待页面调入的内核线程数的平均值
Swpocc
调动队列占用的时间百分比
-q选项可以指出系统中是否运行太多的作业(runq-sz), 或有一个潜在的页面调度瓶颈. 在一个高度事务性的系统中, 运行队列可能有几百个, 因为每个事务只使用少量的cpu时间. 如果页面调度是主要问题, 则运行vmstat命令, 高的io等待表明存在严重的磁盘争用活动, 或由于内存不足而产生过多的页面调度.
四, tprof监视进程的cpu使用
Tprof用于统计每个进程的cpu使用情况. 对任何使用可能是cpu受限的情况, 以及想了解程序的哪些部分占用大量cpu的人, 该命令是一个有用的工具.
Tprof可用以下四种方式运行;
1, 实时或在线方式
2, 人工离线方式;
3, 自动离线方式;
4, 后处理方式
4.1 实时或在线方式
如果指定-x标志但未指定-A标记, 则tprof以实时方式运行. 在实时方式下, tprof在后台启动AIX trace实用程序并处理所产生的跟踪数据. 当被概要分析的程序结束时, tprof收集符号名称信息并生成报告.
# tprof -x sleep 10
Tue Jul 14 17:09:01 2009
System: AIX 5.3 Node: i2db Machine: 00CC886E4C00
Starting Command sleep 10
stopping trace collection.
Generating sleep.prof
# ls
perl01 sleep.prof
# more sleep.prof
Configuration information
=========================
System: AIX 5.3 Node: i2db Machine: 00CC886E4C00
Tprof command was:
tprof -x sleep 10
Trace command was:
/usr/bin/trace -ad -M -L 1722525696 -T 500000 -j 000,00A,001,002,003,38F,005,006,134,139,5A2,5A5,465,234, -o -
Total Samples = 685
Traced Time = 10.03s (out of a total execution time of 10.03s)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Process Freq Total Kernel User Shared Other
======= ==== ===== ====== ==== ====== =====
wait 4 100.00 100.00 0.00 0.00 0.00
======= ==== ===== ====== ==== ====== =====
Total 4 100.00 100.00 0.00 0.00 0.00
Process PID TID Total Kernel User Shared Other
======= === === ===== ====== ==== ====== =====
wait 8196 8197 55.91 55.91 0.00 0.00 0.00
wait 57372 69667 14.74 14.74 0.00 0.00 0.00
wait 53274 61471 14.74 14.74 0.00 0.00 0.00
wait 49176 57373 14.60 14.60 0.00 0.00 0.00
======= === === ===== ====== ==== ====== =====
Total 100.00 100.00 0.00 0.00 0.00
上述命令运行10秒, 在当前目录下创建一个名为sleep.tprof的文件. Sleep.tprof文件中字段total为此进程调度到的cpu次数, tprof的输出准确地显示出哪个进程在使用cpu时间.
在上面的报告中我们看到, 大部分cpu时间都是被wait占用的, 这里的wait实际上是idle进程, 可以表明这个系统是一个完全空闲的系统.
五, ps命令
Ps命令主要用来显示进程的当前状态.
5.1 显示占用cpu最高的进程
# ps aux |head -20
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
root 57372 6.1 0.0 384 384 - A Jan 10 131504:45 wait
root 73764 6.1 0.0 384 384 - A Jan 10 129539:44 wait
root 65568 6.0 0.0 384 384 - A Jan 10 128808:58 wait
root 8196 5.9 0.0 384 384 - A Jan 10 126804:12 wait
root 61470 5.9 0.0 384 384 - A Jan 10 125464:31 wait
root 77862 5.7 0.0 384 384 - A Jan 10 122563:54 wait
root 69666 5.7 0.0 384 384 - A Jan 10 121680:22 wait
root 53274 5.6 0.0 384 384 - A Jan 10 119426:46 wait
oracle 409836 1.9 1.0 57344 81668 - A 16:21:14 9:32 oracleSISDB2 (LO
oracle 856126 1.4 1.0 57140 81464 - A 15:25:53 12:48 oracleSISDB2 (LO
oracle 598078 0.7 1.0 56740 81064 - A 17:18:20 0:20 oracleSISDB2 (LO
oracle 606456 0.4 1.0 56036 80360 - A 17:21:46 0:05 oracleSISDB2 (LO
oracle 966862 0.1 1.0 55144 79468 - A Jul 08 70:32 oracleSISDB2 (LO
oracle 442494 0.1 1.0 58984 83308 - A Feb 16 1711:01 ora_lms1_SISDB2
oracle 581808 0.1 1.0 59140 83464 - A Feb 16 1706:08 ora_lms0_SISDB2
oracle 974952 0.1 1.0 55224 79548 - A 12:54:44 1:46 oracleSISDB2 (LO
root 176256 0.0 0.0 508 512 - A Jan 10 211:58 /usr/sbin/syncd
oracle 573582 0.0 1.0 57680 82004 - A Feb 16 142:18 ora_lmon_SISDB2
oracle 651300 0.0 1.0 57204 81528 - A Feb 16 118:48 ora_diag_SISDB2
在这个输出结果中, 排在前面的8个root用户的wait进程, 这其实是cpu空闲的时候运行的空闲进程.
所以cpu最高的几个进程实际是下面的oracle用户的欧瑞aSISDB2进程, 我们可以用下面的方法查看具体的进程在干什么事情.
例如我们查看PID = 487432的进程, 可以使用下面的方法.
# su - oracle
[YOU HAVE NEW MAIL]
$ sqlplus /nolog
SQL*Plus: Release 10.2.0.3.0 - Production on Tue Jul 14 17:24:42 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
SQL> conn / as sysdba
Connected.
SQL> oradebug setospid 487432
Oracle pid: 12, Unix process pid: 487432, image: oracle@i2db (MMNL)
SQL> oradebug event 10046 trace name context forever,level 8
Statement processed.
SQL> oradebug tracefile_name
/oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc
SQL> oradebug event 10046 trace name context off
Statement processed.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
$ tkprof /oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc
output = arpdb_mm1.txt
TKPROF: Release 10.2.0.3.0 - Production on Tue Jul 14 17:31:29 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
$
六, 小结
对于系统cpu的监控,建议:
<p class="MsoNormal" s