sar 命令
sar 命令很强大,是分析系统性能的重要工具之一,通过该命令可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据。
基本格式
[root@localhost ~]# sar [options] [-o filename] interval [count]
格式中各个参数含义
| -o filename: | 
filename 为文件名,表示将命令结果以二进制格式存放在文件中; | 
| interval: | 
表示采样间隔时间,该参数必须手动设置; | 
| count: | 
表示采样次数,是可选参数,其默认值为 1; | 
| options: | 
为命令行选项 | 
sar 命令行选项及功能
| 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 | 
显示系统交换活动在采样时间内的状态。 | 
 sar 命令更多可用的选项及功能,可通过执行 man sar 命令查看。
例
如果想要查看系统 CPU 的整理负载状况,每 3 秒统计一次,统计 5 次,可以执行如下命令:
[root@localhost ~]# sar -u 3 5
Linux 2.6.32-431.el6.x86_64 (localhost)     10/25/2019     _x86_64_    (1 CPU)
06:18:23 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:18:26 AM     all     12.11      0.00      2.77      3.11      0.00     82.01
06:18:29 AM     all      6.55      0.00      2.07      0.00      0.00     91.38
06:18:32 AM     all      6.60      0.00      2.08      0.00      0.00     91.32
06:18:35 AM     all     10.21      0.00      1.76      0.00      0.00     88.03
06:18:38 AM     all      8.71      0.00      1.74      0.00      0.00     89.55
Average:        all      8.83      0.00      2.09      0.63      0.00     88.46
此输出结果中,各个列表项的含义分别如下:
| %user: | 
用于表示用户模式下消耗的 CPU 时间的比例; | 
| %nice: | 
通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例; | 
| %system: | 
系统模式下消耗的 CPU 时间的比例; | 
| %iowait: | 
CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例; | 
| %steal: | 
利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例; | 
| %idle: | 
CPU 空闲时间比例。 | 
例
如果想要查看系统磁盘的读写性能,可执行如下命令:
[root@localhost ~]# sar -d 3 5
Linux 2.6.32-431.el6.x86_64 (localhost)     10/25/2019     _x86_64_    (1 CPU)
06:36:52 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
06:36:55 AM    dev8-0      3.38      0.00    502.26    148.44      0.08     24.11      4.56      1.54
06:36:55 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
06:36:58 AM    dev8-0      1.49      0.00     29.85     20.00      0.00      1.75      0.75      0.11
06:36:58 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
06:37:01 AM    dev8-0     68.26      6.96  53982.61    790.93      3.22     47.23      3.54     24.17
06:37:01 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
06:37:04 AM    dev8-0    111.69   3961.29    154.84     36.85      1.05      9.42      3.44     38.43
06:37:04 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
06:37:07 AM    dev8-0      1.67    136.00      2.67     83.20      0.01      6.20      6.00      1.00
Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0     34.45    781.10   9601.22    301.36      0.78     22.74      3.50     12.07
此输出结果中各个列表头的含义如下:
| 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 的百分比,比率越大,说明越饱和。 |