Linux sar命令详解 分析系统性能
发布时间:2022-03-25 00:00:09

sar 命令很强大,是分析系统性能的重要工具之一,通过该命令可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据。

sar 命令的基本格式如下:

[root@localhost ~]# sar [options] [-o filename] interval [count]

 

此命令格式中,各个参数的含义如下:

  • -o filename:其中,filename 为文件名,此选项表示将命令结果以二进制格式存放在文件中;
  • interval:表示采样间隔时间,该参数必须手动设置;
  • count:表示采样次数,是可选参数,其默认值为 1;
  • options:为命令行选项,由于 sar 命令提供的选项很多,这里不再一一介绍,仅列举出常用的一些选项及对应的功能,如表 1 所示。

 

表 1 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 显示系统交换活动在采样时间内的状态。

【例 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 等来查看