本章介绍使用 vmstat、iostat、df 和 sar 命令监视系统性能的过程。
有关与监视系统性能相关的过程的信息,请参见以下主题:
任务 |
说明 |
参考 |
---|---|---|
显示虚拟内存统计信息。 |
使用 vmstat 命令收集虚拟内存统计信息。 | |
显示系统事件信息。 |
使用 vmstat 命令和 -s 选项显示系统事件信息。 | |
显示交换统计信息。 |
使用 vmstat 命令和 -S 选项显示交换统计信息。 | |
显示每台设备的中断。 |
使用 vmstat 命令和 -i 选项显示每台设备的中断次数。 | |
显示磁盘使用率。 |
使用 iostat 命令报告磁盘输入和输出统计信息。 | |
显示扩展磁盘统计信息。 |
使用 iostat 命令和 -xtc 选项显示扩展磁盘统计信息。 | |
显示磁盘空间信息。 |
df -k 命令以千字节为单位显示磁盘空间信息。 |
可以使用 vmsta 命令报告虚拟内存统计信息,以及有关系统事件(例如 CPU 负载、分页、上下文切换数、设备中断和系统调用)的信息。vmstat 命令还可以显示有关交换、高速缓存刷新和中断的统计信息。
表 13–1 vmstat 命令的输出
类别 |
字段名 |
说明 |
---|---|---|
procs |
|
报告以下内容: |
|
r |
分发队列中的内核线程数 |
|
b |
正在等待资源的阻塞内核线程数 |
|
w |
正在等待处理中的资源完成的换出 LWP 数 |
memory |
|
报告实际内存和虚拟内存的使用情况: |
|
swap |
可用交换空间 |
|
free |
可用列表的大小 |
page |
|
以秒为单位报告页面错误和分页活动: |
|
re |
回收的页面 |
|
mf |
次要错误和主要错误 |
|
pi |
页入的千字节数 |
|
po |
页出的千字节数 |
|
fr |
释放的千字节数 |
|
de |
最近换入的进程所需的预计内存 |
|
sr |
由 page 守护程序扫描的当前未使用的页数。如果 sr 不等于零,则 page 守护程序一直在运行。 |
磁盘 |
|
报告每秒的磁盘操作数,最多显示四个磁盘中的数据 |
faults |
|
报告每秒的陷阱/中断速率: |
|
in |
每秒的中断次数 |
|
sy |
每秒的系统调用数 |
|
cs |
CPU 上下文切换速率 |
cpu |
|
报告 CPU 使用时间: |
|
us |
用户时间 |
|
sy |
系统时间 |
|
id |
空闲时间 |
有关此命令的更多详细说明,请参见 vmstat(1M) 手册页。
以下示例显示了利用 vmstat 报告的以 5 秒为间隔收集的统计信息:
$ vmstat 5 kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr dd f0 s1 -- in sy cs us sy id 0 0 0 863160 365680 0 3 1 0 0 0 0 0 0 0 0 406 378 209 1 0 99 0 0 0 765640 208568 0 36 0 0 0 0 0 0 0 0 0 479 4445 1378 3 3 94 0 0 0 765640 208568 0 0 0 0 0 0 0 0 0 0 0 423 214 235 0 0 100 0 0 0 765712 208640 0 0 0 0 0 0 0 3 0 0 0 412 158 181 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 402 157 179 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 403 153 182 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 402 168 177 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 402 153 178 0 0 100 0 0 0 765832 208760 0 18 0 0 0 0 0 0 0 0 0 407 165 186 0 0 100 |
运行 vmstat -s 命令,以显示自上次引导系统以来发生的系统事件数。
$ vmstat -s 0 swap ins 0 swap outs 0 pages swapped in 0 pages swapped out 522586 total address trans. faults taken 17006 page ins 25 page outs 23361 pages paged in 28 pages paged out 45594 total reclaims 45592 reclaims from free list 0 micro (hat) faults 522586 minor (as) faults 16189 major faults 98241 copy-on-write faults 137280 zero fill page faults 45052 pages examined by the clock daemon 0 revolutions of the clock hand 26 pages freed by the clock daemon 2857 forks 78 vforks 1647 execs 34673885 cpu context switches 65943468 device interrupts 711250 traps 63957605 system calls 3523925 total name lookups (cache hits 99%) 92590 user cpu 65952 system cpu 16085832 idle cpu 7450 wait cpu |
运行 vmstat -S,以显示交换统计信息。
$ vmstat -S kthr memory page disk faults cpu r b w swap free si so pi po fr de sr dd f0 s1 -- in sy cs us sy id 0 0 0 862608 364792 0 0 1 0 0 0 0 0 0 0 0 406 394 213 1 0 99 |
以下列表介绍了交换统计信息字段。有关其他字段的说明,请参见表 13–1。
每秒换入的平均 LWP 数
换出的完整进程数
vmstat 命令会截断 si 和 so 字段的输出。应使用 sar 命令显示更精确的交换统计信息记录。
以下示例显示 vmstat -i 命令的输出。
$ vmstat -i interrupt total rate -------------------------------- clock 52163269 100 esp0 2600077 4 zsc0 25341 0 zsc1 48917 0 cgsixc0 459 0 lec0 400882 0 fdc0 14 0 bppc0 0 0 audiocs0 0 0 -------------------------------- Total 55238959 105 |
使用 iostat 命令可以报告有关磁盘输入和输出的统计信息,以及生成对吞吐量、使用率、队列长度、事务速率和服务时间的测量值。有关此命令的详细说明,请参阅 iostat(1M) 手册页。
使用 iostat 命令和时间间隔秒数可以显示磁盘使用率信息。
$ iostat 5 tty fd0 sd3 nfs1 nfs31 cpu tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id 0 1 0 0 410 3 0 29 0 0 9 3 0 47 4 2 0 94 |
输出的第一行显示自上次引导系统以来的统计信息。后面的每行显示间隔的统计信息。缺省情况下会显示终端 (tty)、磁盘 (fd 以及 sd) 和 CPU (cpu) 的统计信息。
$ iostat 5 tty sd0 sd6 nfs1 nfs49 cpu tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id 0 0 1 0 49 0 0 0 0 0 0 0 0 15 0 0 0 100 0 47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 44 6 132 0 0 0 0 0 0 0 0 0 0 0 1 99 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 3 1 23 0 0 0 0 0 0 0 0 0 0 0 1 99 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 |
下表介绍了 iostat n 命令输出中的字段。
设备类型 |
字段名 |
说明 |
---|---|---|
终端 |
设备类型 | |
tin |
终端输入队列中的字符数 |
|
tout |
终端输出队列中的字符数 |
|
磁盘 |
设备类型 | |
bps |
每秒块数 |
|
tps |
每秒事务数 |
|
serv |
平均服务时间,以毫秒为单位 |
|
CPU |
设备类型 | |
us |
在用户模式下 |
|
sy |
在系统模式下 |
|
wt |
等待 I/O |
|
id |
空闲 |
运行 iostat -xtc 命令,以显示扩展磁盘统计信息。
$ iostat -xtc extended device statistics tty cpu device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 100 sd0 0.0 0.0 0.4 0.4 0.0 0.0 49.5 0 0 sd6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs49 0.0 0.0 0.0 0.0 0.0 0.0 15.1 0 0 nfs53 0.0 0.0 0.4 0.0 0.0 0.0 24.5 0 0 nfs54 0.0 0.0 0.0 0.0 0.0 0.0 6.3 0 0 nfs55 0.0 0.0 0.0 0.0 0.0 0.0 4.9 0 0 |
iostat -xtc 命令对每个磁盘显示一行输出。以下列表介绍了输出字段。
每秒读取次数
每秒写入次数
每秒读取的千字节数
每秒写入的千字节数
等待服务的平均事务数(队列长度)
处于活动服务状态的平均事务数
平均服务时间,以毫秒为单位
队列不为空的时间百分比
磁盘繁忙的时间百分比
使用 df 命令可以显示挂载的每个磁盘中的可用磁盘空间量。df 报告的可用磁盘空间只反映全部容量的 90%,因为报告统计信息留出总可用空间的 10% 以上。此头空间通常保持为空,以实现更好的性能。
df 命令实际报告的磁盘空间百分比是已用空间除以可用空间。
如果文件系统超出容量的 90%,则可使用 cp 命令将文件转移至具有可用空间的磁盘。或者,使用 tar 或 cpio 命令将文件转移至磁带。也可以删除文件。
有关此命令的详细说明,请参见 df(1M) 手册页。
使用 df -k 命令以千字节为单位显示磁盘空间信息。
$ df -k Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t3d0s0 192807 40231 133296 24% / |
$ df -k Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t0d0s0 254966 204319 25151 90% / /devices 0 0 0 0% /devices ctfs 0 0 0 0% /system/contract proc 0 0 0 0% /proc mnttab 0 0 0 0% /etc/mnttab swap 496808 376 496432 1% /etc/svc/volatile objfs 0 0 0 0% /system/object /dev/dsk/c0t0d0s6 3325302 3073415 218634 94% /usr fd 0 0 0 0% /dev/fd swap 496472 40 496432 1% /var/run swap 496472 40 496432 1% /tmp /dev/dsk/c0t0d0s5 13702 1745 10587 15% /opt /dev/dsk/c0t0d0s7 9450 1045 7460 13% /export/home |
字段名 |
说明 |
---|---|
kbytes |
文件系统中可用空间的总大小 |
used |
已用空间量 |
avail |
可用空间量 |
capacity |
已用空间量,表示为总容量的百分比 |
mounted on |
挂载点 |
组织并查看有关系统活动的数据。
根据特殊请求访问系统活动数据。
生成自动报告以测量和监视系统性能,并生成特殊请求报告以确定特定性能问题。有关如何设置要在系统上运行的 sar 命令的信息以及相应工具的说明,请参见自动收集系统活动数据 (sar)。
有关此命令的详细说明,请参见 sar(1) 手册页。
$ sar -a SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:00 iget/s namei/s dirbk/s 01:00:00 0 3 0 02:00:00 0 3 0 03:00:00 0 3 0 04:00:00 0 3 0 05:00:00 0 3 0 06:00:00 0 3 0 07:00:00 0 3 0 08:00:00 0 3 0 08:20:01 0 3 0 08:40:00 0 3 0 09:00:00 0 3 0 09:20:01 0 10 0 09:40:01 0 1 0 10:00:02 0 5 0 Average 0 4 0 |
以下列表介绍了 sar -a 命令报告的操作系统例程的字段名和说明。
对不位于目录名称查找高速缓存 (Directory Name Look-up Cache, DNLC) 中的 inode 发出的请求数。
每秒搜索的文件系统路径数。如果 namei 在 DNLC 中找不到目录名称,它会调用 iget 以获取文件或目录的 inode。因此,大多数 igets 都是 DNLC 遗漏的结果。
每秒发出的目录块读取数。
这些操作系统例程的报告值越大,内核访问用户文件所用的时间就越多。时间的长短将反映程序和应用程序使用文件系统的程度。-a 选项有助于查看磁盘与应用程序的相关情况。
使用 sar -b 命令可显示缓冲区活动统计信息。
缓冲区用于高速缓存元数据。元数据包括 inode、柱面组块和间接块。
$ sar -b 00:00:00 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s 01:00:00 0 0 100 0 0 55 0 0 |
下面的 sar -b 命令输出示例说明 %rcache 和 %wcache 缓冲区未引起速率下降。所有数据都在可接受的限制范围内。
$ sar -b SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s 01:00:00 0 0 100 0 0 94 0 0 02:00:01 0 0 100 0 0 94 0 0 03:00:00 0 0 100 0 0 92 0 0 04:00:00 0 1 100 0 1 94 0 0 05:00:00 0 0 100 0 0 93 0 0 06:00:00 0 0 100 0 0 93 0 0 07:00:00 0 0 100 0 0 93 0 0 08:00:00 0 0 100 0 0 93 0 0 08:20:00 0 1 100 0 1 94 0 0 08:40:01 0 1 100 0 1 93 0 0 09:00:00 0 1 100 0 1 93 0 0 09:20:00 0 1 100 0 1 93 0 0 09:40:00 0 2 100 0 1 89 0 0 10:00:00 0 9 100 0 5 92 0 0 10:20:00 0 0 100 0 0 68 0 0 10:40:00 0 1 98 0 1 70 0 0 11:00:00 0 1 100 0 1 75 0 0 Average 0 1 100 0 1 91 0 0 |
下表介绍了 -b 选项显示的缓冲区活动。
字段名 |
说明 |
---|---|
bread/s |
从磁盘提交至高速缓存存储区的每秒平均读取数 |
lread/s |
每秒从高速缓存存储区进行的平均逻辑读取数 |
%rcache |
在高速缓存存储区中找到的逻辑读取的分数(100 % 减去 bread/s 与 lread/s 之比) |
bwrit/s |
每秒平均从高速缓存存储区写入磁盘的物理块数(512 块) |
lwrit/s |
每秒平均对高速缓存存储区进行的逻辑写入数 |
%wcache |
在高速缓存存储区中找到的逻辑写入的分数(100 % 减去 bwrit/s 与 lwrit/s 之比) |
pread/s |
每秒平均使用字符设备接口的物理读取数 |
pwrit/s |
每秒平均使用字符设备接口的物理写入请求数 |
最重要的项是高速缓存命中率 %rcache 和 %wcache。这两项用于度量系统缓冲的有效性。如果 %rcache 低于 90% 或者 %wcache 低于 65%,则可通过增加缓冲区空间来改善性能。
使用 sar -c 命令可显示系统调用统计信息。
$ sar -c 00:00:00 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s 01:00:00 38 2 2 0.00 0.00 149 120 |
以下示例显示 sar -c 命令的输出。
$ sar -c SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s 01:00:00 89 14 9 0.01 0.00 2906 2394 02:00:01 89 14 9 0.01 0.00 2905 2393 03:00:00 89 14 9 0.01 0.00 2908 2393 04:00:00 90 14 9 0.01 0.00 2912 2393 05:00:00 89 14 9 0.01 0.00 2905 2393 06:00:00 89 14 9 0.01 0.00 2905 2393 07:00:00 89 14 9 0.01 0.00 2905 2393 08:00:00 89 14 9 0.01 0.00 2906 2393 08:20:00 90 14 9 0.01 0.01 2914 2395 08:40:01 90 14 9 0.01 0.00 2914 2396 09:00:00 90 14 9 0.01 0.01 2915 2396 09:20:00 90 14 9 0.01 0.01 2915 2396 09:40:00 880 207 156 0.08 0.08 26671 9290 10:00:00 2020 530 322 0.14 0.13 57675 36393 10:20:00 853 129 75 0.02 0.01 10500 8594 10:40:00 2061 524 450 0.08 0.08 579217 567072 11:00:00 1658 404 350 0.07 0.06 1152916 1144203 Average 302 66 49 0.02 0.01 57842 55544 |
下表介绍了 -c 选项报告的系统调用类别。通常,读取和写入占系统调用总数的一半。但是,该百分比会因系统所执行的活动而产生极大的变化。
字段名 |
说明 |
---|---|
scall/s |
每秒中所有类型的系统调用数,在具有 4 到 6 位用户的系统中,通常每秒大约有 30 个系统调用。 |
sread/s |
每秒的 read 系统调用数。 |
swrit/s |
每秒的 write 系统调用数。 |
fork/s |
每秒的 fork 系统调用数,在具有 4 到6 位用户的系统中,每秒中大约有 0.5 个该系统调用。如果正在运行 Shell 脚本,此数字会增加。 |
exec/s |
每秒的 exec 系统调用数。如果 exec/s 除以 fork/s 的结果大于 3,请确定是否存在无效的 PATH 变量。 |
rchar/s |
每秒由 read 系统调用传送的字符数(字节)。 |
wchar/s |
每秒由 write 系统调用传送的字符数(字节)。 |
此缩写示例演示了 sar -d 命令的输出。
$ sar -d SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 12:36:32 device %busy avque r+w/s blks/s avwait avserv 12:40:01 dad1 15 0.7 26 399 18.1 10.0 dad1,a 15 0.7 26 398 18.1 10.0 dad1,b 0 0.0 0 1 1.0 3.0 dad1,c 0 0.0 0 0 0.0 0.0 dad1,h 0 0.0 0 0 0.0 6.0 fd0 0 0.0 0 0 0.0 0.0 nfs1 0 0.0 0 0 0.0 0.0 nfs2 1 0.0 1 12 0.0 13.2 nfs3 0 0.0 0 2 0.0 1.9 nfs4 0 0.0 0 0 0.0 7.0 nfs5 0 0.0 0 0 0.0 57.1 nfs6 1 0.0 6 125 4.3 3.2 nfs7 0 0.0 0 0 0.0 6.0 sd1 0 0.0 0 0 0.0 5.4 ohci0,bu 0 0.0 0 0 0.0 0.0 ohci0,ct 0 0.0 0 0 0.0 0.0 ohci0,in 0 0.0 7 0 0.0 0.0 ohci0,is 0 0.0 0 0 0.0 0.0 ohci0,to 0 0.0 7 0 0.0 0.0 |
下表介绍了 -d 选项报告的磁盘设备活动。
字段名 |
说明 |
---|---|
device |
监视的磁盘设备的名称。 |
%busy |
设备忙于为传送请求提供服务的时间份额。 |
avque |
设备忙于为传送请求提供服务期间的平均请求数。 |
r+w/s |
每秒对设备进行的读取和写入传送数。 |
blks/s |
每秒传送给设备的 512 字节块的数量。 |
avwait |
传送请求在队列中空闲等待的平均时间,以毫秒为单位。仅当队列被占用时才测量此时间。 |
avserv |
设备完成传送请求所需的平均时间,以毫秒为单位。对于磁盘而言,此值包括查找时间、旋转延迟时间和数据传送时间。 |
请注意,在队列不为空时测量队列长度和等待时间。当 %busy 很小时,如果队列和服务时间很大,则可能表示系统进行周期性的努力,以确保将警报块快速写入磁盘。
使用 sar -g 命令可显示平均页出和内存释放活动。
$ sar -g 00:00:00 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf 01:00:00 0.00 0.00 0.00 0.00 0.00 |
sar -g 命令的输出可以明确指示是否需要更多内存。使用 ps -elf 命令显示 page 守护程序使用的周期数。如果周期数很大,并且 pgfree/s 和 pgscan/s 字段的值也很大,则表明内存不足。
sar -g 命令还可表明是否回收 inode 的速率过快而引起可重用页丢失。
以下示例显示 sar -g 命令的输出。
$ sar -g SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:00 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf 01:00:00 0.00 0.00 0.00 0.00 0.00 02:00:00 0.01 0.01 0.01 0.00 0.00 03:00:00 0.00 0.00 0.00 0.00 0.00 04:00:00 0.00 0.00 0.00 0.00 0.00 05:00:00 0.00 0.00 0.00 0.00 0.00 06:00:00 0.00 0.00 0.00 0.00 0.00 07:00:00 0.00 0.00 0.00 0.00 0.00 08:00:00 0.00 0.00 0.00 0.00 0.00 08:20:01 0.00 0.00 0.00 0.00 0.00 08:40:00 0.00 0.00 0.00 0.00 0.00 09:00:00 0.00 0.00 0.00 0.00 0.00 09:20:01 0.05 0.52 1.62 10.16 0.00 09:40:01 0.03 0.44 1.47 4.77 0.00 10:00:02 0.13 2.00 4.38 12.28 0.00 10:20:03 0.37 4.68 12.26 33.80 0.00 Average 0.02 0.25 0.64 1.97 0.00 |
下表介绍了 -g 选项的输出。
字段名 |
说明 |
---|---|
pgout/s |
每秒的页出请求数。 |
ppgout/s |
每秒调出的页的实际数量。单个页出请求可能涉及多个页的调出。 |
pgfree/s |
每秒放置在可用列表中的页数。 |
pgscan/s |
page 守护程序每秒扫描的页数。如果此值很大,则表明 page 守护程序花费大量时间来检查可用内存。此情况暗示,可能需要更多内存。 |
%ufs_ipf |
具有关联的可重用页的 iget 从可用列表中取消的 ufs inode 的百分比。这些页面被刷新,并且不能由进程回收。因此,此字段表示具有页面刷新的 igets 的百分比。如果该值很大,则表明 inode 的可用列表页面密集,并且可能需要增加 ufs inode 的数量。 |
KMA 允许内核子系统根据需要分配和释放内存。
KMA 并不是静态分配在峰值载荷下预计所需的最大内存量,而是将内存请求划分为三个类别:
小型(少于 256 字节)
大型(512 字节至 4 千字节)
超大型(大于 4 千字节)
KMA 保留两个内存池,以满足小型和大型请求。超大型请求则通过从系统页面分配器中分配内存来满足。
如果您所检查的系统用来编写使用 KMA 资源的驱动程序或 STREAMS,则 sar -k 命令可能很有用。否则,您可能不需要它所提供的信息。使用 KMA 资源但不一定在退出前返回资源的所有驱动程序或模块都可能产生内存泄漏。内存泄漏会导致 KMA 分配的内存量随事件而增加。因此,如果 sar -k 命令的 alloc 字段随时间稳定增加,则可能存在内存泄漏。表明存在内存泄漏的另一种情况是请求失败。如果出现此问题,内存泄漏很可能导致 KMA 无法保留和分配内存。
如果似乎存在内存泄漏,则应检查可能从 KMA 请求内存但未返回内存的所有驱动程序或 STREAMS。
使用 sar -k 命令可报告内核内存分配器 (Kernel Memory Allocator, KMA) 的以下活动。
$ sar -k 00:00:00 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail 01:00:00 2523136 1866512 0 18939904 14762364 0 360448 0 02:00:02 2523136 1861724 0 18939904 14778748 0 360448 0 |
下面是 sar -k 输出的缩写示例。
$ sar -k SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail 01:00:00 6119744 4852865 0 60243968 54334808 156 9666560 0 02:00:01 6119744 4853057 0 60243968 54336088 156 9666560 0 03:00:00 6119744 4853297 0 60243968 54335760 156 9666560 0 04:00:00 6119744 4857673 0 60252160 54375280 156 9666560 0 05:00:00 6119744 4858097 0 60252160 54376240 156 9666560 0 06:00:00 6119744 4858289 0 60252160 54375608 156 9666560 0 07:00:00 6119744 4858793 0 60252160 54442424 156 9666560 0 08:00:00 6119744 4858985 0 60252160 54474552 156 9666560 0 08:20:00 6119744 4858169 0 60252160 54377400 156 9666560 0 08:40:01 6119744 4857345 0 60252160 54376880 156 9666560 0 09:00:00 6119744 4859433 0 60252160 54539752 156 9666560 0 09:20:00 6119744 4858633 0 60252160 54410920 156 9666560 0 09:40:00 6127936 5262064 0 60530688 55619816 156 9666560 0 10:00:00 6545728 5823137 0 62996480 58391136 156 9666560 0 10:20:00 6545728 5758997 0 62996480 57907400 156 9666560 0 10:40:00 6734144 6035759 0 64389120 59743064 156 10493952 0 11:00:00 6996288 6394872 0 65437696 60935936 156 10493952 0 Average 6258044 5150556 0 61138340 55609004 156 9763900 0 |
下表介绍了 -k 选项的输出。
字段名 |
说明 |
---|---|
sml_mem |
KMA 在小型内存请求池中可用的内存量,以字节为单位。在此池中,小型请求小于 256 字节。 |
alloc |
KMA 已从其小型内存请求池向小型内存请求分配的内存量,以字节为单位。 |
fail |
请求少量内存并失败的请求数。 |
lg_mem |
KMA 在大型内存请求池中可用的内存量,以字节为单位。在此池中,大型请求介于 512 字节到 4 千字节之间。 |
alloc |
KMA 已从其大型内存请求池向大型内存请求分配的内存量,以字节为单位。 |
fail |
请求大量内存并失败的请求数。 |
ovsz_alloc |
为大于 4 千字节的超大型请求分配的内存量。这些请求可通过页面分配器来满足。因此,不存在池。 |
fail |
因请求超大量内存而失败的请求数。 |
$ sar -m 00:00:00 msg/s sema/s 01:00:00 0.00 0.00 |
除非运行使用消息或信号的应用程序,否则这些数字通常都为零 (0.00)。
以下列表介绍了 -m 选项的输出。
每秒的消息操作(发送和接收)数
每秒的信号操作数
以下缩写示例显示 sar -m 命令的输出。
$ sar -m SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:00 msg/s sema/s 01:00:00 0.00 0.00 02:00:02 0.00 0.00 03:00:00 0.00 0.00 04:00:00 0.00 0.00 05:00:01 0.00 0.00 06:00:00 0.00 0.00 Average 0.00 0.00 |
使用 sar -p 命令可报告页入活动,其中包括保护错误和转换错误。
$ sar -p 00:00:00 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s 01:00:00 0.07 0.00 0.00 0.21 0.39 0.00 |
以下示例显示 sar -p 命令的输出。
$ sar -p SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s 01:00:00 0.09 0.00 0.00 0.78 2.02 0.00 02:00:01 0.08 0.00 0.00 0.78 2.02 0.00 03:00:00 0.09 0.00 0.00 0.81 2.07 0.00 04:00:00 0.11 0.01 0.01 0.86 2.18 0.00 05:00:00 0.08 0.00 0.00 0.78 2.02 0.00 06:00:00 0.09 0.00 0.00 0.78 2.02 0.00 07:00:00 0.08 0.00 0.00 0.78 2.02 0.00 08:00:00 0.09 0.00 0.00 0.78 2.02 0.00 08:20:00 0.11 0.00 0.00 0.87 2.24 0.00 08:40:01 0.13 0.00 0.00 0.90 2.29 0.00 09:00:00 0.11 0.00 0.00 0.88 2.24 0.00 09:20:00 0.10 0.00 0.00 0.88 2.24 0.00 09:40:00 2.91 1.80 2.38 4.61 17.62 0.00 10:00:00 2.74 2.03 3.08 8.17 21.76 0.00 10:20:00 0.16 0.04 0.04 1.92 2.96 0.00 10:40:00 2.10 2.50 3.42 6.62 16.51 0.00 11:00:00 3.36 0.87 1.35 3.92 15.12 0.00 Average 0.42 0.22 0.31 1.45 4.00 0.00 |
下表介绍了通过 -p 选项报告的统计信息。
字段名 |
说明 |
---|---|
atch/s |
每秒通过回收当前在内存中的页来满足的页面错误数(每秒附加数)。例如从可用列表中回收无效的页,以及共享其他进程当前正在使用的文本页。例如,两个或多个进程同时访问同一程序文本。 |
pgin/s |
文件系统每秒接收页入请求的次数。 |
ppgin/s |
每秒调进的页数。单个页入请求(例如软件锁定请求,请参见 slock/s)或块大小很大时可能涉及多个页的调进。 |
pflt/s |
因保护错误引起的页面错误数。保护错误实例表明非法访问页面和“写复制”。通常,此数目主要包含“写复制”。 |
vflt/s |
每秒的地址转换页面错误数。这些错误称为有效性错误。当给定虚拟地址的有效进程表项不存在时,会发生有效性错误。 |
slock/s |
每秒内由要求物理 I/O 的软件锁定请求引起的错误数。例如,从磁盘向内存传输数据时,就会出现软件锁定请求。系统锁定了要接收数据的页,因此其他进程无法请求和使用该页。 |
队列被占用时的平均队列长度。
队列处于占用状态的时间百分比。
$ sar -q 00:00:00 runq-sz %runocc swpq-sz %swpocc |
以下列表介绍了 -q 选项的输出。
内存中等待 CPU 以便运行的内核线程数。通常,此值应小于 2。如果此值持续偏高,则表明系统可能计算密集 (CPU-bound)。
占用分发队列的时间百分比。
交换 sar 命令的进程队列。
交换 sar 命令的进程队列。
以下示例显示 sar -q 命令的输出。如果 %runocc 值较大(大于 90%)并且 runq-sz 值大于 2,则表明 CPU 负载较大,并且响应变慢。在此情况下,可能需要提供附加的 CPU 容量,才能获得可接受的系统响应速度。
# sar -q SunOS system2 5.10 Generic_142909-13 sun4u 06/28/2010 00:00:00 runq-sz %runocc swpq-sz %swpocc 01:00:00 1.0 7 0.0 0 02:00:00 1.0 7 0.0 0 03:00:00 1.0 7 0.0 0 04:00:00 1.0 7 0.0 0 05:00:00 1.0 6 0.0 0 06:00:00 1.0 7 0.0 0 Average 1.0 7 0.0 0 |
使用 sar -r 命令可报告当前未使用的内存页数和交换文件磁盘块数。
$ sar -r 00:00:00 freemem freeswap 01:00:00 2135 401922 |
以下列表介绍了 -r 选项的输出:
在该命令采样的时间间隔内可供用户进程使用的平均内存页数。页面大小与计算机有关。
可用于页交换的 512 字节磁盘块数。
以下示例显示 sar -r 命令的输出。
$ sar -r SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 freemem freeswap 01:00:00 44717 1715062 02:00:01 44733 1715496 03:00:00 44715 1714746 04:00:00 44751 1715403 05:00:00 44784 1714743 06:00:00 44794 1715186 07:00:00 44793 1715159 08:00:00 44786 1714914 08:20:00 44805 1715576 08:40:01 44797 1715347 09:00:00 44761 1713948 09:20:00 44802 1715478 09:40:00 41770 1682239 10:00:00 35401 1610833 10:20:00 34295 1599141 10:40:00 33943 1598425 11:00:00 30500 1561959 Average 43312 1699242 |
$ sar -u 00:00:00 %usr %sys %wio %idle 01:00:00 0 0 0 100 |
没有任何选项的 sar 命令与 sar -u 命令等效。在任意给定时刻,处理器都会处于繁忙或空闲状态。繁忙时,处理器可能处于用户模式或系统模式。空闲时,处理器可能在等待 I/O 完成,或“静止”而不执行任何操作。
以下列表介绍了 -u 选项的输出:
列出处理器处于用户模式的时间百分比。
列出处理器处于系统模式的时间百分比。
列出处理器空闲并等待 I/O 完成的时间百分比。
列出处理器空闲并且未等待 I/O 的时间百分比。
%wio 值越大,通常表示磁盘速率变慢。
以下示例显示 sar -u 命令的输出。
$ sar -u SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 %usr %sys %wio %idle 01:00:00 0 0 0 100 02:00:01 0 0 0 100 03:00:00 0 0 0 100 04:00:00 0 0 0 100 05:00:00 0 0 0 100 06:00:00 0 0 0 100 07:00:00 0 0 0 100 08:00:00 0 0 0 100 08:20:00 0 0 0 99 08:40:01 0 0 0 99 09:00:00 0 0 0 99 09:20:00 0 0 0 99 09:40:00 4 1 0 95 10:00:00 4 2 0 94 10:20:00 1 1 0 98 10:40:00 18 3 0 79 11:00:00 25 3 0 72 Average 2 0 0 98 |
使用 sar -v 命令可报告进程表、inode 表、文件表和共享内存记录表的状态。
$ sar -v 00:00:00 proc-sz ov inod-sz ov file-sz ov lock-sz 01:00:00 43/922 0 2984/4236 0 322/322 0 0/0 |
以下缩写示例显示 sar -v 命令的输出。此示例表明,所有表都足够大,因此没有溢出。这些表都基于物理内存量进行动态分配。
$ sar -v SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 proc-sz ov inod-sz ov file-sz ov lock-sz 01:00:00 69/8010 0 3476/34703 0 0/0 0 0/0 02:00:01 69/8010 0 3476/34703 0 0/0 0 0/0 03:00:00 69/8010 0 3476/34703 0 0/0 0 0/0 04:00:00 69/8010 0 3494/34703 0 0/0 0 0/0 05:00:00 69/8010 0 3494/34703 0 0/0 0 0/0 06:00:00 69/8010 0 3494/34703 0 0/0 0 0/0 07:00:00 69/8010 0 3494/34703 0 0/0 0 0/0 08:00:00 69/8010 0 3494/34703 0 0/0 0 0/0 08:20:00 69/8010 0 3494/34703 0 0/0 0 0/0 08:40:01 69/8010 0 3494/34703 0 0/0 0 0/0 09:00:00 69/8010 0 3494/34703 0 0/0 0 0/0 09:20:00 69/8010 0 3494/34703 0 0/0 0 0/0 09:40:00 74/8010 0 3494/34703 0 0/0 0 0/0 10:00:00 75/8010 0 4918/34703 0 0/0 0 0/0 10:20:00 72/8010 0 4918/34703 0 0/0 0 0/0 10:40:00 71/8010 0 5018/34703 0 0/0 0 0/0 11:00:00 77/8010 0 5018/34703 0 0/0 0 0/0 |
下表介绍了 -v 选项的输出。
字段名 |
说明 |
---|---|
proc-sz |
内核中当前正在使用或已分配的进程项(proc 结构)数。 |
inod-sz |
与内核中分配的最大 inode 数相比,内存中的 inode 总数。此数字不是严格的高水位标记。该数字可以溢出。 |
file-sz |
打开的系统文件表的大小。由于文件表的空间是动态分配的,因此 sz 被给定为 0。 |
ov |
在每个表的采样点之间发生的溢出。 |
lock-sz |
内核中当前正在使用或分配的共享内存记录表项的数量。由于共享内存记录表的空间是动态分配的,因此 sz 被给定为 0。 |
使用 sar -w 命令可报告交换和切换活动。
$ sar -w 00:00:00 swpin/s bswin/s swpot/s bswot/s pswch/s 01:00:00 0.00 0.0 0.00 0.0 22 |
以下列表介绍了 sar -w 命令输出的目标值和观测值。
每秒传入内存的 LWP 数。
每秒为换入传送的块数 /* (float)PGTOBLK(xx->cvmi.pgswapin) / sec_diff */。
每秒换出内存的平均进程数。如果该数字大于 1,则可能需要增大内存。
每秒为换出传送的块数。
每秒的内核线程切换数。
所有进程换入都包括进程初始化。
以下示例显示 sar -w 命令的输出。
$ sar -w SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 swpin/s bswin/s swpot/s bswot/s pswch/s 01:00:00 0.00 0.0 0.00 0.0 132 02:00:01 0.00 0.0 0.00 0.0 133 03:00:00 0.00 0.0 0.00 0.0 133 04:00:00 0.00 0.0 0.00 0.0 134 05:00:00 0.00 0.0 0.00 0.0 133 06:00:00 0.00 0.0 0.00 0.0 133 07:00:00 0.00 0.0 0.00 0.0 132 08:00:00 0.00 0.0 0.00 0.0 131 08:20:00 0.00 0.0 0.00 0.0 133 08:40:01 0.00 0.0 0.00 0.0 132 09:00:00 0.00 0.0 0.00 0.0 132 09:20:00 0.00 0.0 0.00 0.0 132 09:40:00 0.00 0.0 0.00 0.0 335 10:00:00 0.00 0.0 0.00 0.0 601 10:20:00 0.00 0.0 0.00 0.0 353 10:40:00 0.00 0.0 0.00 0.0 747 11:00:00 0.00 0.0 0.00 0.0 804 Average 0.00 0.0 0.00 0.0 198 |
$ sar -y 00:00:00 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s 01:00:00 0 0 0 0 0 0 |
如果有多个终端 I/O,则可使用此报告来确定是否存在任何错误行。以下列表中定义了记录的活动。
每秒输入字符数(原始队列)。
canon(规则队列)每秒处理的输入字符数。
每秒输出字符数(输出队列)。
每秒接收器硬件中断次数。
每秒传送器硬件中断次数。
每秒调制解调器中断次数。
每秒调制解调器中断次数 (mdmin/s) 应接近于零。每秒的接收和传送中断次数(rcvin/s 和 xmtin/s)应分别小于或等于传入或传出字符数。否则,请检查是否存在错误行。
以下示例显示 sar -y 命令的输出。
$ sar -y SunOS balmyday 5.10 s10_51 sun4u 03/18/2004 00:00:04 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s 01:00:00 0 0 0 0 0 0 02:00:01 0 0 0 0 0 0 03:00:00 0 0 0 0 0 0 04:00:00 0 0 0 0 0 0 05:00:00 0 0 0 0 0 0 06:00:00 0 0 0 0 0 0 07:00:00 0 0 0 0 0 0 08:00:00 0 0 0 0 0 0 08:20:00 0 0 0 0 0 0 08:40:01 0 0 0 0 0 0 09:00:00 0 0 0 0 0 0 09:20:00 0 0 0 0 0 0 09:40:00 0 0 1 0 0 0 10:00:00 0 0 37 0 0 0 10:20:00 0 0 0 0 0 0 10:40:00 0 0 3 0 0 0 11:00:00 0 0 3 0 0 0 Average 0 0 1 0 0 0 |
自动收集系统活动数据时需要使用三个命令:sadc、sa1 和 sa2。
sadc 数据收集实用程序定期收集系统数据,并以二进制格式的文件保存数据,每 24 小时保存一个文件。可以将 sadc 命令设置为定期运行(通常每小时一次),并在系统引导到多用户模式时运行。数据文件放置在 /var/adm/sa 目录中。每个文件都命名为 sadd,其中 dd 是当前日期。命令的格式如下:
/usr/lib/sa/sadc [t n] [ofile] |
该命令以 t 秒为间隔采样 n 次,两次采样之间的间隔应大于 5 秒。然后,此命令将向二进制 ofile 文件或标准输出中写入数据。
sadc 命令应在系统引导时运行,以记录自计数器重置为零以来的统计信息。为确保在引导时运行 sadc 命令,svcadm enable system/sar:default 命令会向每日数据文件中写入一条记录。
/usr/bin/su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`" |
为了生成定期记录,您需要定期运行 sadc 命令。最简单的方法是在 /var/spool/cron/crontabs/sys 文件中取消对下列行的注释:
# 0 * * * 0-6 /usr/lib/sa/sa1 # 20,40 8-17 * * 1-5 /usr/lib/sa/sa1 # 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A |
sys crontab 项执行以下操作:
前两个 crontab 项可在星期一到星期五从上午 8 点到下午 5 点,每 20 分钟或每小时向 /var/adm/sa/sadd 文件写入一条记录。
第三项可从星期一到星期五每小时向 /var/adm/sa/sar dd 文件写入一条记录,并且可以包括所有 sar 选项。
可以更改这些缺省设置,以满足您的需要。
另一个 shell 脚本 sa2 可生成报告,而不是二进制数据文件。sa2 命令调用 sar 命令,并将 ASCII 输出写入报告文件。
sar 命令可用于自行收集系统活动数据,或报告 sadc 命令所创建的每日活动文件中收集的内容。
sar 命令格式如下:
sar [-aAbcdgkmpqruvwy] [-o file] t [n] |
sar [-aAbcdgkmpqruvwy] [-s time] [-e time] [-i sec] [-f file] |
以下 sar 命令每隔 t 秒对操作系统中的累积活动计数器进行采样,共进行 n 次。t 应大于或等于 5 秒。否则,命令本身会对样本产生影响。必须指定采样的时间间隔。否则,命令将根据第二种格式运行。n 的缺省值为 1。以下示例以 10 秒为间隔抽取两个样本。如果指定 -o 选项,则以二进制格式保存样本。
$ sar -u 10 2 |
有关 sar 命令的其他重要信息包括:
如果不指定采样间隔或样本数,sar 命令将从以前记录的文件中提取数据。该文件是由 -f 选项为最近一天指定的文件,或对应于最近一天的标准每日活动文件 /var/adm/sa/sa dd(缺省设置)。
-s 和 -e 选项定义报告的开始时间和结束时间。开始时间和结束时间的格式为 hh[:mm[:ss]],其中 hh、mm 和 ss 表示小时、分钟和秒。
选项 |
操作 |
---|---|
-a |
检查文件访问操作 |
-b |
检查缓冲区活动 |
-c |
检查系统调用 |
-d |
检查每个块设备的活动 |
-g |
检查页出和内存释放 |
-k |
检查内核内存分配 |
-m |
检查进程间通信 |
-nv |
检查系统表状态 |
-p |
检查交换和分发活动 |
-q |
检查队列活动 |
-r |
检查未使用的内存 |
-u |
检查 CPU 使用率 |
-w |
检查交换和切换卷 |
-y |
检查终端活动 |
-A |
报告总体系统性能,这与输入所有选项等效。 |
不使用任何选项等效于调用带 -u 选项的 sar 命令。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
运行 svcadm enable system/sar:default 命令。
此版本的 sadc 命令会写入一条特殊记录,其中标记了将计数器重置为零的时间(引导时间)。
编辑 /var/spool/cron/crontabs/sys crontab 文件。
不要直接编辑 crontab 文件。而要改用 crontab -e 命令对现有 crontab 文件进行更改。
# crontab -e sys |
取消对以下行的注释:
0 * * * 0-6 /usr/lib/sa/sa1 20,40 8-17 * * 1-5 /usr/lib/sa/sa1 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A |
有关更多信息,请参见 crontab(1) 手册页。