CPU 性能监视
[font=宋体]处理单元是系统中最快的组件之一。在某一时间对单个程序来说保持 100% 的 CPU 占用率(也就是说,空闲 0%,等待 0%)超过几秒钟是相对少见的。甚至在重负载的多用户系统中,偶尔会出现一些 10 毫秒(ms)的时间段,在其结束时所有线程处于等待状态。如果监视器长时间地显示 CPU 占用率为 100%,则很有可能是某个程序陷入了死循环。即使程序“仅仅”是占用较多资源而不是崩溃了,也需要将它识别出来并进行处理。[/font] [align=left][align=left][font=宋体]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,表示内存不足。
[*]sy 在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。但是通常来讲,在一个单处理器系统上当 [font=新宋体]sy[/font] 列增大到超过每秒钟 10000 个调用时,则要求进行进一步调查(在一个 SMP 系统上,这个数字为每个处理器每秒钟 10000 个调用)。一个原因可能是“轮询”子例程,像 select() 子例程。对这一列,建议进行一个基准评估,给出正常 [font=新宋体]sy[/font] 值的计数。
[*]cs 在某一时间间隔中观测到的每秒钟上下文切换次数。物理 CPU 资源细分为每个 10 毫秒的逻辑时间片。假设一个线程被调度运行,它将一直运行直到它的时间片用完、直到被抢先或直到它自愿放弃 CPU 控制权。当给予另一个线程 CPU 控制权时,必须保存前一个线程的上下文或工作环境,并且必须装入当前线程的上下文。操作系统有一个很有效的上下文切换过程,所以每次切换并不耗费资源。任何上下文切换的显著增加,如当 [font=新宋体]cs[/font] 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
下面的示例显示了 iostat 命令输出的一部分。第一节显示了自从系统启动以来的统计信息摘要。
sar 命令sar 命令收集关于系统的统计数据。尽管可以用它来收集一些关于系统性能的有用数据,但 sar 命令会增加系统负载,如果采样频率较高就会加剧预先存在的性能问题。但与记帐包相比,sar 命令的干扰更小。系统维护了一系列系统活动计数器,用来记录各种活动并提供 sar 命令报告的数据。sar 命令不会导致这些计数器被更新或使用;不论 sar 命令是否运行这都会自动进行。根据指定给 sar 命令的采样速率和采样次数,它仅仅从这些计数器中提取数据并保存下来。
通过它的许多选项,sar 命令提供了排队、页面调度、TTY 和许多其它的统计信息。sar 命令的一个重要功能是它会报告系统级(所有处理器的综合)的 CPU 统计信息(对一些结果取平均值,以百分比表示,对其它求和),或者报告每个独立处理器的统计信息。所以这个命令在 SMP 系统上特别有用。
有三种情况可以使用 sar 命令:
实时采样和显示要收集并立即显示系统统计报告,使用下列命令:
# sar -u 2 5AIX aixhost 2 5 00049FDF4C00 02/21/0418: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.outAIX aixhost 2 5 00049FDF4C00 02/21/0418:10:18 %usr %sys %wio %idle18:10:20 9 2 0 8818:10:22 13 10 0 7618:10:24 37 4 0 5918:10:26 8 2 0 9018: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 相关的最有用选项有:
[list][*]sar -P -P 选项报告指定处理器的每处理器统计信息。通过指定 ALL 关键字,可以报告每个单独的处理器统计信息和所有处理器的平均值。在指定要报告统计信息的标志中,只有 -a、-c、-m、-u 和 -w 这几个标志与 -P 标志一起使用才有意义的。
下面的示例显示了当一个 CPU 受限程序在 0 号处理器上运行时的每处理器统计信息:
# sar -P ALL 2 3AIX aixsmphost 2 5 00049FDF4D01 02/22/0417:30:50 cpu %usr %sys %wio %idle17: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 7417: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 7417: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每节的最后一行在 [font=新宋体]cpu[/font] 一列中以一个短划线([font=新宋体]-[/font])开始,是所有处理器的平均值。只有当使用 -P ALL 选项时才会显示一个平均值([font=新宋体]-[/font])行。如果指定了处理器,这一行将被除去。最后一节标记了[font=新宋体]平均值[/font]而不是一个时间戳,保留了所有节中处理器特定行的平均值。
下列示例显示了此时 vmstat 的输出:
# vmstat 2 5kthr 内存 页面 故障 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 利用率输出中的虚线([font=新宋体]-[/font])行相当。
[*]sar -u 该命令显示了 CPU 利用率。如果不指定其它标志,这就是缺省标志。它显示的信息与 vmstat 或 iostat 命令的 CPU 统计信息一样。
在下列示例中,启动了一个复制命令:
[*]sar -c -c 选项显示了系统调用率。
# sar -c 1 319:28:25 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s19:28:26 134 36 1 0.00 0.00 2691306 151719:28:27 46 34 1 0.00 0.00 2716922 153119: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 命令也可以显示它们。请特别注意 [font=新宋体]fork/s[/font] 一列。如果它较高,则可能需要使用记帐实用程序(如 trace 命令或 tprof 命令)进行进一步调查。
[*]sar -q -q 选项显示了运行队列长度和交换队列长度。
# sar -q 5 319:31:42 runq-sz %runocc swpq-sz %swpocc19:31:47 1.0 100 1.0 10019:31:52 2.0 100 1.0 10019:31:57 1.0 100 1.0 100平均值 1.3 95 1.0 95runq-sz 每秒钟可运行的平均线程数和运行队列被占用的时间百分比(% 字段容易出错)。 swapq-sz VMM 等待队列中的平均线程数和交换队列被占用的时间百分比。(% 字段容易出错。) -q 选项可以指出您系统中是否运行太多的作业([font=新宋体]runq-sz[/font]),或有一个潜在的页面调度瓶颈。在一个高度事务性的系统中,例如企业资源规划(ERP),运行队列可能有几百个,因为每项事务只使用少量的 CPU 时间。如果页面调度是问题所在,则运行 vmstat 命令。高的 I/O 等待表明存在严重的磁盘争用活动,或由于内存不足而产生过多的页面调度。
[/list]xmperf 程序使用 xmperf 程序以变动的轮廓线图显示 CPU 使用情况。在 Performance Toolbox Version 2 and 3 for AIX: Guide and Reference 中对 xmperf 程序有详细描述。[/font]
linuxcms 于 2006-12-09 10:29:35发表:
不错,学习了。