sar 命令很强大,是分析系统性能的重要工具之一,通过该命令可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据。
sar 命令的基本格式如下:
[root@localhost ~]# sar [options] [-o filename] interval [count]
此命令格式中,各个参数的含义如下:
- -o filename:其中,filename 为文件名,此选项表示将命令结果以二进制格式存放在文件中;
- interval:表示采样间隔时间,该参数必须手动设置;
- count:表示采样次数,是可选参数,其默认值为 1;
- options:为命令行选项,由于 sar 命令提供的选项很多,这里不再一一介绍,仅列举出常用的一些选项及对应的功能,如表 1 所示。
sar命令选项 | 功能 |
---|---|
-A | 显示系统所有资源设备(CPU、内存、磁盘)的运行状况。 |
-u | 显示系统所有 CPU 在采样时间内的负载状态。 |
-P | 显示当前系统中指定 CPU 的使用情况。 |
-d | 显示系统所有硬盘设备在采样时间内的使用状态。 |
-r | 显示系统内存在采样时间内的使用情况。 |
-b | 显示缓冲区在采样时间内的使用情况。 |
-v | 显示 inode 节点、文件和其他内核表的统计信息。 |
-n | 显示网络运行状态,此选项后可跟 DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)和 FULL(等同于使用 DEV、EDEV和SOCK)等,有关更多的选项,可通过执行 man sar 命令查看。 |
-q | 显示运行列表中的进程数、进程大小、系统平均负载等。 |
-R | 显示进程在采样时的活动情况。 |
-y | 显示终端设备在采样时间的活动情况。 |
-w | 显示系统交换活动在采样时间内的状态。 |
【例 1】
如果想要查看系统 CPU 的整理负载状况,每 3 秒统计一次,统计 5 次,可以执行如下命令:
# sar -u 3 5
23时51分26秒 CPU %user %nice %system %iowait %steal %idle
23时51分29秒 all 0.50 0.00 0.67 0.00 0.00 98.83
23时51分32秒 all 0.33 0.00 1.00 0.00 0.00 98.66
23时51分35秒 all 0.50 0.00 0.67 0.17 0.00 98.66
23时51分38秒 all 0.50 0.00 1.00 0.00 0.00 98.49
23时51分41秒 all 0.67 0.00 0.84 0.67 0.00 97.82
平均时间: all 0.50 0.00 0.84 0.17 0.00 98.49
此输出结果中,各个列表项的含义分别如下:
- %user:用于表示用户模式下消耗的 CPU 时间的比例;
- %nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例;
- %system:系统模式下消耗的 CPU 时间的比例;
- %iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例;
- %steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例;
- %idle:CPU 空闲时间比例。
【例 2】
如果想要查看系统磁盘的读写性能,可执行如下命令:
# sar -d 3 5
23时53分18秒 DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
23时53分21秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
23时53分24秒 dev253-0 7.00 240.00 9.67 35.67 0.01 2.24 0.52 0.37
23时53分27秒 dev253-0 0.67 0.00 1.33 2.00 0.00 0.00 0.50 0.03
23时53分30秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
23时53分33秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: dev253-0 1.53 48.00 2.20 32.74 0.00 2.04 0.52 0.08
此输出结果中,各个列表头的含义如下:
- tps:每秒从物理磁盘 I/O 的次数。注意,多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的;
- rd_sec/s:每秒读扇区的次数;
- wr_sec/s:每秒写扇区的次数;
- avgrq-sz:平均每次设备 I/O 操作的数据大小(扇区);
- avgqu-sz:磁盘请求队列的平均长度;
- await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒);
- svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间;
- %util:I/O 请求占 CPU 的百分比,比率越大,说明越饱和。
【例 3】inode、文件和其他内核表监控
例如,每10秒采样一次,连续采样3次,观察核心表的状态,需键入如下命令:
#sar -v 10 3
23时58分25秒 dentunusd file-nr inode-nr pty-nr
23时58分35秒 55516 3008 76569 2
23时58分45秒 55516 3008 76569 2
23时58分55秒 55525 3008 76578 2
平均时间: 55519 3008 76572 2
输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量
【例 4】内存和交换空间监控
例如,每10秒采样一次,连续采样3次,监控内存分页:
# sar -r 10 3
00时03分39秒 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
00时03分49秒 206048 1212316 3619688 94.61 0 1191428 7146688 186.81 2609696 601772 56
00时03分59秒 206112 1212380 3619624 94.61 0 1191428 7146688 186.81 2609704 601772 56
00时04分09秒 203616 1209560 3622120 94.68 0 1191104 7146688 186.81 2609620 601668 40
平均时间: 205259 1211419 3620477 94.63 0 1191320 7146688 186.81 2609673 601737 51
输出项说明:
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
【例 5】内存分页监控
例如,每10秒采样一次,连续采样3次,监控内存分页:
# sar -B 10 3
00时08分59秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
00时09分09秒 0.00 0.00 0.60 0.00 66.10 0.00 12.00 12.00 100.00
00时09分19秒 0.00 2.40 0.00 0.00 5.70 0.00 0.00 0.00 0.00
00时09分29秒 0.00 11.70 0.00 0.00 2.90 0.00 0.00 0.00 0.00
平均时间: 0.00 4.70 0.20 0.00 24.90 0.00 4.00 4.00 100.00
输出项说明:
pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s:每秒钟产生的主缺页数.
pgfree/s:每秒被放入空闲队列中的页个数
pgscank/s:每秒被kswapd扫描的页个数
pgscand/s:每秒直接被扫描的页个数
pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数
%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看