LINUX工具进阶:用sar找出系统瓶颈

sarSystem Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。

sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。

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

  • 追溯过去的统计数据(默认)

  • 周期性的查看当前数据

1.安装sar工具

有的linux系统下,默认可能没有安装这个包,可以使用下面命令来安装:

[root@yunkvm ~]# yum install -y sysstat
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.bfsu.edu.cn
……

安装完成后即可使用,其默认配置文件信息如下:

[root@yunkvm ~]# cat /etc/sysconfig/sysstat
# sysstat-10.1.5 configuration file.

# How long to keep log files (in days).
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
HISTORY=28

# Compress (using gzip or bzip2) sa and sar files older than (in days):
COMPRESSAFTER=31

# Parameters for the system activity data collector (see sadc manual page)
# which are used for the generation of log files.
SADC_OPTIONS="-S DISK"

# Compression program to use.
ZIP="bzip2"

[root@yunkvm ~]# 

其中:

  • HISTORY=28

用于指定sysstat工具保存历史数据的天数。这里为28天。

  • COMPRESSAFTER=31

用于指定多长时间后对收集的数据进行压缩。COMPRESSAFTER的单位是天,表示从数据文件的创建时间开始计算,当数据文件的年月日与当前日期相差大于或等于COMPRESSAFTER时,就会对数据文件进行压缩。

例如,COMPRESSAFTER=31表示在数据文件创建后31天后对其进行压缩。

  • SADC_OPTIONS="-S DISK"

用于指定sa1命令在收集系统性能数据时的选项。其中,-S指定收集系统性能数据,DISK表示收集磁盘相关的性能数据。

  • ZIP="bzip2"

用于指定sysstat工具在对历史数据进行压缩时所使用的压缩工具。默认情况下,ZIP的值为gzip,即sysstat工具使用gzip工具对历史数据进行压缩。如果需要使用其他的压缩工具,可以将ZIP的值修改为相应的压缩工具名称。

2.sar参数说明

参数 含义
-u CPU使用情况
-r 内存使用情况
-b I/O使用情况
-n DEV 网络使用情况
-n EDEV 扩展网络使用情况
-n NFS NFS客户端使用情况
-n NFSD NFS服务器使用情况
-n SOCK 套接字使用情况
-n IP IP使用情况
-q 进程队列长度和负载
-A 所有报告
-P ALL 所有CPU报告
-d 磁盘使用情况
-p 分区使用情况
-W 系统交换情况
-S Swap使用情况

3.sar用法举例

3.1查看CPU使用率

sar -u : 默认情况下显示的cpu使用率等信息就是sar -u

[root@yunkvm ~]# sar 1 3
Linux 3.10.0-957.el7.x86_64 (yunkvm)  2023年06月01日  _x86_64_ (32 CPU)

11时46分18秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
11时46分19秒     all      4.04      0.00      0.79      0.32      0.00     94.85
11时46分20秒     all      5.77      0.00      0.60      0.57      0.00     93.05
11时46分21秒     all      5.52      0.00      0.73      0.16      0.00     93.59
平均时间:     all      5.11      0.00      0.71      0.35      0.00     93.84
[root@yunkvm ~]# 

可以看到这台机器有相应的时间消耗; 各列的指标分别是:

  • %user:用户模式下消耗的CPU时间的比例;

  • %nice :通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例

  • %system: 系统模式下消耗的CPU时间的比例;

  • %iowaitCPU等待磁盘I/O导致空闲状态消耗的时间比例;

  • %steal :利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;

  • %idleCPU空闲时间比例;

3.2查看平均负载

sar -q: 查看平均负载,该命令可以用来监控系统的负载情况,了解系统当前的压力情况,以便及时调整系统资源或优化系统性能。

指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等;与其它命令相比,它能查看各项指标随时间变化的情况;

  • runq-sz:运行队列的长度(等待运行的进程数)

  • plist-sz:进程列表中进程(processes)和线程(threads)的数量

  • ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载

  • ldavg-15:过去15分钟的系统平均负载

如下:以1秒为间隔,连续监控系统平均负载和进程队列长度,共监控30次,即30秒。

[root@yunkvm ~]# sar -q 1 30
Linux 3.10.0-957.el7.x86_64 (yunkvm)  2023年06月01日  _x86_64_ (32 CPU)

11时59分26秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
11时59分27秒         1      1163      1.24      1.23      1.22         0
11时59分28秒         1      1173      1.24      1.23      1.22         0
11时59分29秒         0      1172      1.14      1.21      1.22         0
11时59分30秒         2      1162      1.14      1.21      1.22         0
11时59分31秒         1      1163      1.14      1.21      1.22         0
11时59分32秒         1      1164      1.14      1.21      1.22         0
11时59分33秒         3      1165      1.14      1.21      1.22         0
11时59分34秒         2      1167      1.13      1.21      1.22         0
11时59分35秒         2      1168      1.13      1.21      1.22         0
11时59分36秒         4      1172      1.13      1.21      1.22         0
11时59分37秒         1      1171      1.13      1.21      1.22         0
11时59分38秒         0      1161      1.13      1.21      1.22         0
11时59分39秒         1      1163      1.04      1.19      1.21         0
11时59分40秒         1      1167      1.04      1.19      1.21         0
11时59分41秒         0      1167      1.04      1.19      1.21         0
11时59分42秒         4      1164      1.04      1.19      1.21         0
11时59分43秒         3      1167      1.04      1.19      1.21         0
11时59分44秒         6      1167      1.20      1.22      1.22         0
11时59分45秒         1      1178      1.20      1.22      1.22         0
11时59分46秒         1      1174      1.20      1.22      1.22         0
11时59分47秒         3      1178      1.20      1.22      1.22         0
11时59分48秒         2      1179      1.20      1.22      1.22         0
11时59分49秒         1      1179      1.58      1.30      1.25         0
11时59分50秒         5      1170      1.58      1.30      1.25         0
11时59分51秒         1      1172      1.58      1.30      1.25         0
11时59分52秒         2      1172      1.58      1.30      1.25         0
11时59分53秒         0      1171      1.58      1.30      1.25         0
11时59分54秒         0      1168      1.54      1.29      1.25         1
11时59分55秒         1      1179      1.54      1.29      1.25         0
11时59分56秒         0      1180      1.54      1.29      1.25         0
平均时间:         2      1170      1.25      1.23      1.23         0
[root@yunkvm ~]# 
3.3查看内存使用状况

sar -r: 指定-r之后,可查看物理内存使用状况。

该命令可以用来了解系统内存的使用情况,包括内存总量、空闲内存、已使用内存、缓存、交换分区等信息,以便及时调整系统资源或优化系统性能。

如下:以1秒为间隔,连续监控系统内存使用情况,共监控3次

[root@yunkvm ~]# sar -r 1 3
Linux 3.10.0-957.el7.x86_64 (yunkvm)  2023年06月01日  _x86_64_ (32 CPU)

12时02分29秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
12时02分30秒    791736 263063820     99.70        96  70828820 336498268    123.60 183183320  74221356       140
12时02分31秒    792224 263063332     99.70        96  70828820 336498268    123.60 183183344  74221376       140
12时02分32秒    791932 263063624     99.70        96  70828820 336498268    123.60 183183364  74221376       164
平均时间:    791964 263063592     99.70        96  70828820 336498268    123.60 183183343  74221369       148
[root@yunkvm ~]# 
  • kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffercache的空间。

  • kbmemused:这个值和free命令中的used值基本一致,所以它包括buffercache的空间。

  • %memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比。

  • kbbufferskbcached:这两个值就是free命令中的buffercache

  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)

  • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比。

3.4查看页面交换发生状况

sar -W:查看页面交换发生状况。

页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换。

如下:以1秒为间隔,连续监控系统交换情况,共监控3次。

[root@yunkvm ~]# sar -W 1 3
Linux 3.10.0-957.el7.x86_64 (yunkvm)  2023年06月01日  _x86_64_ (32 CPU)

12时07分15秒  pswpin/s pswpout/s
12时07分16秒      0.00      0.00
12时07分17秒      0.00      0.00
12时07分18秒      0.00      0.00
平均时间:      0.00      0.00
[root@yunkvm ~]# 

该命令可以用来了解系统交换分区的使用情况,包括交换分区的总量、空闲量、已使用量、交换读写速度等信息,以便及时调整系统资源或优化系统性能。

  • pswpin/s:每秒系统换入的交换页面(swap page)数量。

  • pswpout/s:每秒系统换出的交换页面(swap page)数量。

要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来:

  • 怀疑CPU存在瓶颈,可用 sar -usar -q 等来查看。

  • 怀疑内存存在瓶颈,可用sar -Bsar -rsar -W 等来查看。

  • 怀疑I/O存在瓶颈,可用 sar -bsar -usar -d 等来查看。