全部博文(212)
分类:
2006-12-07 08:39:40
r-->在运行队列中等待的进程数
b-->在等待io的进程数
w-->可以进入运行队列但被替换的进程
memoy
swap-->现时可用的交换内存(k表示)
free-->空闲的内存(k表示)
pages
re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面
disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号
fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换
cpu 表示cpu的使用状态
cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
vmstat 命令(CPU)
第一个要使用的工具是 vmstat 命令,该命令可迅速提供关于各种系统资源和与之相关的性能问题的简要信息。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 列如下:
us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。
id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。如果没有线程可以执行(运行队列为空),系统分派一个叫做 wait 的线程,也称为 idle kproc。在一个 SMP 系统中,每个处理器都有一个 wait 线程可分派。由 ps 命令(带有 -k 或 -g 0选项)生成的报告将它确定为 kproc 或 wait。如果 ps 报告显示这个线程的总计时间较高,这表明存在重要的时间段,其中没有其它线程准备在 CPU 上运行或等待执行。系统因此大部分时间空闲和等待新任务。
wa 列详细显示了暂挂本地磁盘 I/O 和 NFS 加载的磁盘的 CPU 空闲百分比。如果在 wait 运行时至少有一个未完成的磁盘 I/O,该时间就归为 I/O 等待时间。除非进程使用异常 I/O,否则对磁盘的 I/O 请求会导致调用的进程阻塞(或睡眠),直到请求完成为止。一旦进程的 I/O 请求完成,该进程就放入运行队列中。如果 I/O 很快完成,该进程可以使用更多的 CPU 时间。
超过 25% 的 wa 的值可以表示磁盘子系统可能没有被正确平衡,或者这也可能是磁盘密集工作负载的结果。
关于对 wa 进行的更改的信息,请参阅。
每秒钟在采样间隔时间上对各种队列中的内核线程数求得的平均值。kthr 列如下:
可运行的内核线程平均数,包括正在运行的线程和正在等待 CPU 的线程。如果这个数字大于 CPU 的数目,至少有一个线程要等待 CPU,等待 CPU 的线程越多,越有可能对性能产生影响。
每秒 VMM 等待队列中的内核线程平均数。这包括正在等待文件系统 I/O 的线程,或由于内存装入控制而暂挂的线程。
如果进程由于内存装入控制而暂挂,在 vmstat 报告中的阻塞列(b)表明线程数目增加,而不是运行队列数目增加。
对于 vmstat -I,是每秒等待原始设备 I/O 的线程数目。等待文件系统 I/O的线程不包括在这里。
关于进程控制的信息,如陷阱和中断率。故障列如下:
在某一时间间隔中观测到的每秒设备中断数。其它信息可在中找到。
在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。但是通常来讲,在一个单处理器系统上当 sy 列增大到超过每秒钟 10000 个调用时,则要求进行进一步调查(在一个 SMP 系统上,这个数字为每个处理器每秒钟 10000 个调用)。一个原因可能是“轮询”子例程,像 select() 子例程。对这一列,建议进行一个基准评估,给出正常 sy 值的计数。
在某一时间间隔中观测到的每秒钟上下文切换次数。物理 CPU 资源细分为每个 10 毫秒的逻辑时间片。假设一个线程被调度运行,它将一直运行直到它的时间片用完、直到被抢先或直到它自愿放弃 CPU 控制权。当给予另一个线程 CPU 控制权时,必须保存前一个线程的上下文或工作环境,并且必须装入当前线程的上下文。操作系统有一个很有效的上下文切换过程,所以每次切换并不耗费资源。任何上下文切换的显著增加,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
iostat 命令是获得第一印象的最快方法,不论系统是否存在磁盘 I/O 约束的性能问题(参阅)。这个工具也报告 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 的各列中报告。要获得各值的更为详细的解释,请参阅。也请注意在中描述的对 %iowait 所做的更改。
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 系统的处理器特定的信息。
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 & #=================================================================
以这种方式收集数据有助于表征在一段时期中系统的使用情况并确定使用高峰时间。
sar 命令中与 CPU 相关的最有用选项有:
-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 利用率输出中的虚线(-)行相当。
该命令显示了 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 号处理器上工作,其它三个处理器空闲。有关更多信息,请参阅。
-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 命令)进行进一步调查。
-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
-q 选项可以指出您系统中是否运行太多的作业(runq-sz),或有一个潜在的页面调度瓶颈。在一个高度事务性的系统中,例如企业资源规划(ERP),运行队列可能有几百个,因为每项事务只使用少量的 CPU 时间。如果页面调度是问题所在,则运行 vmstat 命令。高的 I/O 等待表明存在严重的磁盘争用活动,或由于内存不足而产生过多的页面调度。
使用 xmperf 程序以变动的轮廓线图显示 CPU 使用情况。在 Performance Toolbox Version 2 and 3 for AIX: Guide and Reference 中对 xmperf 程序有详细描述。