许吉友 - 运维

sar 命令详解

sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。

sar是查看操作系统报告指标的各种工具中,最为普遍和方便的;它有两种用法;

  1. 追溯过去的统计数据(默认)
  2. 周期性的查看当前数据

相关文件

/etc/sysconfig/sysstat 是配置,/var/log/sa是储存统计数据的地方,默认储存一个月的,一天一个文件,文件中有24小时的数据。

使用方法

Usage: sar [ options ] [ [ ] ]

选项

分页统计

$ sudo sar -B
11:00:01 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
11:10:01 AM      2.03   3607.65  71692.69      2.46  52217.31      0.00      0.00      0.00      0.00
11:20:01 AM      0.00   2581.87  69660.71      2.34  51527.05      0.00      0.00      0.00      0.00
11:30:01 AM      0.03   3133.09  70731.26      2.38  52319.47      0.00      0.00      0.00      0.00
11:40:02 AM      0.06   4657.76  71093.80      2.14  53488.74      0.00      0.00      0.00      0.00
11:50:01 AM     27.58   4398.13  70583.10      2.24  52897.79      0.00      0.00      0.00      0.00
12:00:01 PM      0.37   3209.40  71278.17      2.25  52764.36      0.00      0.00      0.00      0.00
12:10:01 PM   1791.07   7004.83  72407.94      2.69  54012.09      0.00      0.00      0.00      0.00
12:20:01 PM      0.11   5210.17  70653.57      2.44  52958.06      0.00      0.00      0.00      0.00
12:30:01 PM      0.11   4626.54  70084.51      2.14  52262.60      0.00      0.00      0.00      0.00
12:40:01 PM      0.16   4981.73  72656.71      2.00  52870.70      0.00      0.00      0.00      0.00
12:50:01 PM    266.87   6141.89  72094.90      2.26  53977.91      0.00      0.00      0.00      0.00
01:00:01 PM      0.24   5113.39  71358.22      2.45  53009.57      0.00      0.00      0.00      0.00
01:10:01 PM      2.03   4596.51  72666.33      2.63  52910.50      0.00      0.00      0.00      0.00
01:20:01 PM      1.52   6023.10  74710.75      2.34  54503.86      0.00      0.00      0.00      0.00
01:30:01 PM      0.00   4068.47  71139.03      2.24  52225.24      0.00      0.00      0.00      0.00
01:40:02 PM      0.37   3002.31  70453.83      2.17  51802.84      0.00      0.00      0.00      0.00
01:50:01 PM      0.00   4055.24  71599.26      2.27  52253.44      0.00      0.00      0.00      0.00
02:00:01 PM      0.00   3728.87  70593.02      2.32  51766.70      0.00      0.00      0.00      0.00
Average:        70.66   3916.90  71392.35      2.33  52780.81      0.00      0.00      0.00      0.00

内存缺页,参考:https://liam.page/2017/09/01/page-fault/

CPU 不能直接和硬盘进行交互。CPU 所作的一切运算,都是通过 CPU 缓存间接与内存进行操作的。若是 CPU 请求的内存数据在物理内存中不存在,那么 CPU 就会报告「缺页错误(Page Fault)」,提示内核。

因为 CPU 无法继续进行进程请求的计算,并报告了缺页错误,用户进程必然就中断了。这样的中断称之为缺页中断。在报告 Page Fault 之后,进程会从用户态切换到系统态,交由操作系统内核的 Page Fault Handler 处理缺页错误。

在内核处理缺页错误时,就有可能进行磁盘的读写操作。这样的操作,相对 CPU 的处理是非常缓慢的。因此,发生大量的缺页错误,势必会对程序的性能造成很大影响。因此,在对性能要求很高的环境下,应当尽可能避免这种情况。

硬缺页错误与软缺页错误

缺页错误可以分为两类:硬缺页错误(Hard Page Fault)和软缺页错误(Soft Page Fault)。这里,前者又称为主要缺页错误(Major Page Fault);后者又称为次要缺页错误(Minor Page Fault)。当缺页中断发生后,Page Fault Handler 会判断缺页的类型,进而处理缺页错误,最终将控制权交给用户态代码。

若是此时物理内存里,已经有一个页帧正是此时 CPU 请求的内存页,那么这是一个软缺页错误;于是,Page Fault Hander 会指示 MMU 建立相应的页帧到页的映射关系。这一操作的实质是进程间共享内存——比如动态库(共享对象),比如 mmap 的文件。

若是此时物理内存中,没有相应的页帧,那么这就是一个硬缺页错误;于是 Page Fault Hander 会指示 CPU,从已经打开的磁盘文件中读取相应的内容到物理内存,而后交由 MMU 建立这份页帧到页的映射关系。

不难发现,软缺页错误只是在内核态里轻轻地走了一遭,而硬缺页错误则涉及到磁盘 I/O。因此,处理起来,硬缺页错误要比软缺页错误耗时长得多。这就是为什么我们要求高性能程序必须在对外提供服务时,尽可能少地发生硬缺页错误。

I/O 和传输速率统计

$ sudo sar -b
11:00:01 AM       tps      rtps      wtps   bread/s   bwrtn/s
11:10:01 AM     41.27      0.20     41.07      4.05   7215.30
11:20:01 AM     40.09      0.00     40.09      0.00   5163.74
11:30:01 AM     40.27      0.00     40.27      0.05   6266.17
11:40:02 AM     46.61      0.00     46.60      0.12   9315.52
11:50:01 AM     45.02      0.20     44.82     55.16   8796.25
12:00:01 PM     39.38      0.02     39.36      0.75   6418.80
12:10:01 PM    160.86    109.95     50.91   3582.14  14009.65
12:20:01 PM     48.60      0.01     48.59      0.21  10420.34
12:30:01 PM     46.36      0.01     46.35      0.21   9253.08
12:40:01 PM     48.12      0.01     48.11      0.32   9963.46
12:50:01 PM     64.90     11.71     53.19    533.75  12283.78
01:00:01 PM     48.01      0.02     48.00      0.48  10226.79
01:10:01 PM     44.68      0.20     44.48      4.05   9193.03
01:20:01 PM     47.00      0.09     46.91      3.04  12046.19
01:30:01 PM     41.79      0.00     41.79      0.00   8136.93
01:40:02 PM     41.34      0.02     41.32      0.75   6004.62
01:50:01 PM     43.18      0.00     43.18      0.00   8110.49
02:00:01 PM     42.10      0.00     42.10      0.00   7457.74
02:10:01 PM     47.36      0.00     47.36      0.16  10533.68
02:20:01 PM     44.76      0.21     44.55      4.21   9032.45
02:30:01 PM     41.61      0.01     41.60      0.21   8671.07
02:40:01 PM     40.81      0.02     40.79      0.64   6113.99
02:50:01 PM     41.53      0.00     41.53      0.00   6614.86
03:00:01 PM     40.64      0.00     40.63      0.05   7533.50
03:10:01 PM     49.95      0.00     49.94      0.07   8999.71
Average:        46.18      3.77     42.41    130.51   7863.06

块设备统计

$ sudo sar -d
03:00:01 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:10:01 PM    dev8-0     30.93      0.07   2309.34     74.66      0.11      3.52      0.12      0.36
03:10:01 PM   dev8-16      0.94      0.00    583.48    618.79      0.11    111.63      3.52      0.33
03:10:01 PM   dev8-32      3.00      0.00   1279.01    426.75      0.24     80.58      5.33      1.60
03:10:01 PM   dev8-48      9.31      0.00    506.35     54.37      0.12     12.37      3.88      3.61
03:10:01 PM   dev8-64      1.27      0.00    998.90    787.90      0.20    158.96      3.91      0.50
03:10:01 PM   dev8-80      1.50      0.00    970.46    646.52      0.23    150.73      4.20      0.63
03:10:01 PM   dev8-96      0.97      0.00    769.20    790.60      0.18    180.31      3.48      0.34
03:10:01 PM  dev8-112      0.99      0.00    800.68    805.04      0.11    112.77      3.63      0.36
03:10:01 PM  dev8-128      1.03      0.00    782.28    761.04      0.14    133.64      3.40      0.35
03:10:01 PM  dev253-0     35.08      0.07   2309.33     65.83      0.16      4.61      0.10      0.36
03:10:01 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-0     28.40    130.49   1993.98     74.80      0.03      1.18      0.13      0.38
Average:      dev8-16      1.02      0.00    648.46    635.04      0.11    111.74      3.29      0.34
Average:      dev8-32      2.61      0.00    795.02    304.64      0.16     59.82      5.80      1.51
Average:      dev8-48      9.13      0.00    817.15     89.55      0.17     18.73      3.93      3.59
Average:      dev8-64      0.93      0.00    696.70    749.92      0.13    134.97      3.74      0.35
Average:      dev8-80      1.16      0.00    697.54    602.27      0.14    120.46      4.16      0.48
Average:      dev8-96      0.95      0.00    701.10    736.55      0.12    122.65      3.89      0.37
Average:     dev8-112      0.99      0.00    766.78    776.45      0.16    160.16      4.00      0.39
Average:     dev8-128      0.99      0.00    746.33    750.59      0.14    145.79      3.57      0.35
Average:     dev253-0     29.40    129.81   1993.98     72.23      0.04      1.28      0.13      0.38
Average:     dev253-1      0.01      0.62      0.00     46.09      0.00      0.15      0.07      0.00