前言
前言:sar(System Activity Repotor系统活动报告)命令是一个非常实用的命令,是由sysstat工具提供的,参考sysstat官网,用于监控系统和判断系统瓶颈, 我们在使用linux系统时,常常会遇到系统卡顿,程序卡顿,以及死机的情况,这时我们需要判断到底时因为什么原因导致的系统卡顿,比如常见的—内存不足,磁盘空间不足,cpu性能紧张,网络原因,等等,在linux系统中,分析系统负载的命令有很多,常见有:top、free、iostat、vmstat、df 等等,不同的命令有不同的特点,相比这些命令,sar命令最突出的特点是它可以看到系统较长一段时间内的数据,而不仅仅是当前这个点的数据,当然,sar命令也可以看到实时的数据,例如,下图,我们通过sar命令可以看到系统每间隔10分钟的数据变化,在末尾他还会列出这些数据的最终的平均值,默认sar命令是使用的-u选项。
sar命令的使用
sar命令的命令行使用格式
sar命令的用法是:sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
直接使用sar命令默认是使用的sar -u选项,如下图:
sar命令的选项和参数非常多,主要记住常用的选项,个人觉得sar命令的-u,-r,-d
选项比较实用,分别是cpu,内存和磁盘的监控情况
,除了u、r、d这三个选项,-f , -o 以及 -s 和 -e
选项也是比较实用的,-o选项可以将查询到的文件以二进制形式保存到一个文件里,sar -f 则可以浏览这个二进制文件,如:
[root@slfri ~]# sar -r 1 1 -o a.txt
Linux 3.10.0-1160.el7.x86_64 (slfri) 2023年04月17日 _x86_64_ (1 CPU)
16时47分10秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
16时47分11秒 302204 333024 52.43 2164 156268 269684 9.87 101396 105296 28
平均时间: 302204 333024 52.43 2164 156268 269684 9.87 101396 105296 28
[root@slfri ~]# sar -f a.txt
Linux 3.10.0-1160.el7.x86_64 (slfri) 2023年04月17日 _x86_64_ (1 CPU)
16时47分10秒 CPU %user %nice %system %iowait %steal %idle
16时47分11秒 all 0.00 0.00 1.00 0.00 0.00 99.00
平均时间: all 0.00 0.00 1.00 0.00 0.00 99.00
-s 和 -e 选项分别是指定开始时间和结束时间,用于看一段时间的指标,如:
sar -u -s 13:00:00 -e 13:30:00
Linux 3.10.0-514.el7.x86_64 (ecs-c883-0425166.novalocal) 2023年04月17日 _x86_64_ (4 CPU)
13时00分01秒 CPU %user %nice %system %iowait %steal %idle
13时10分01秒 all 40.97 0.00 0.34 0.54 0.00 58.15
13时20分01秒 all 41.30 0.00 0.35 0.49 0.00 57.86
平均时间: all 41.13 0.00 0.34 0.52 0.00 58.01
sar命令的选项后面加上时间间隔和次数的参数就是实时显示,如下面的命令就是每个2秒记录一次内存的使用情况,一共记录两次:
sar -r 2 2
Linux 3.10.0-1062.el7.x86_64 (jirab) 04/17/2023 _x86_64_ (4 CPU)
03:04:12 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
03:04:14 PM 136204 7872136 98.30 150720 2970200 4525048 37.08 5063552 2492972 64
03:04:16 PM 136180 7872160 98.30 150720 2970200 4525048 37.08 5063688 2492972 68
Average: 136192 7872148 98.30 150720 2970200 4525048 37.08 5063620 2492972 66
后面的选项,时间间隔,次数都可以省略,不加这两个参数就是从 /var/log/sa/sa17 这个文件读取今天0点到现在的所有内容,每隔十分钟记录一次,sa17
这个数字是当前的日期,由系统自带的定时任务 /etc/cron.d/sysstat 指定,
sa1命令是sysstat工具包中的一部分,在该定时任务中,最后的 “1 1” 是指每次执行 sa1 命令时,传递给该命令的两个参数,分别为采样间隔和采样次数。在该例子中,sa1 命令会每分钟执行一次,并且采样间隔为1秒,总共采样1次。
这意味着系统每10分钟记录一次系统活动情况,每次记录持续1秒钟,共记录1次,这些记录将存储在 /var/log/sa 目录下,以便其他工具(例如 sar)可以使用它们来生成系统活动情况的报告。
/usr/lib64/sa/sa1和/usr/lib64/sa/sa2有什么不一样?
/usr/lib64/sa/sa1和/usr/lib64/sa/sa2都是系统性能统计工具的一部分(sysstat),但它们的作用略有不同:
sa1: 默认情况下每10分钟收集一次数据,它负责收集系统性能统计信息,并将其存储到/var/log/sa/saXX文件中,XX代表当天的日期。sa1适用于大量运行数据的系统。
sa2: 默认情况下每天晚上23点53分运行,sa2定期地汇总前24小时或特定日期的性能数据,并将汇总的数据存储到/var/log/sa/sarXX文件中,XX代表日期(如:sar6代表6号)。Sa2适用于整合系统的性能数据以进行长期分析。
因此,sa1和sa2都是sysstat工具中不可或缺的部分,通过这两个工具,管理员可以更好地监控和调整系统性能,从而提高系统的性能和可靠性。
要查看sa2汇总的数据,可以使用sar命令,具体命令格式为:
sar -f /var/log/sa/sarXX
其中XX代表日期,例如要查看6号的汇总数据,命令为:
sar -f /var/log/sa/sar06
执行后,将输出所选日期的系统性能数据,包括CPU占用率、内存使用率、磁盘IO等。
除了上面讲的u d r f o 等选项,sar命令还有一个很强到的选项 -n
,不过笔者还不太会使用,后面可以查看很多内容,如:sar - n DEV/ICMP,可以查看网络接口,ICMP流量等等,还可以结合-s 和 -e
选项一起使用,查看一段时间的参数,如:
sar -n DEV -s 09:00:00 -e 09:36:36
Linux 3.10.0-514.el7.x86_64 (ecs-c883-0425166.novalocal) 2023年04月17日 _x86_64_ (4 CPU)
09时00分02秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
09时10分01秒 eth0 33.81 41.68 12.57 54.89 0.00 0.00 0.00
09时10分01秒 lo 551.30 551.30 134.13 134.13 0.00 0.00 0.00
09时20分01秒 eth0 39.92 50.17 14.64 73.16 0.00 0.00 0.00
09时20分01秒 lo 509.23 509.23 149.46 149.46 0.00 0.00 0.00
09时30分01秒 eth0 26.51 29.73 11.07 32.16 0.00 0.00 0.00
09时30分01秒 lo 481.13 481.13 120.78 120.78 0.00 0.00 0.00
平均时间: eth0 33.41 40.52 12.76 53.40 0.00 0.00 0.00
平均时间: lo 513.87 513.87 134.79 134.79 0.00 0.00 0.00
命令输出的结果中,各个参数的含义
使用的 sar -n DEV -s 09:00:00 -e 09:36:36 命令用于报告指定时间范围内的网络接口统计信息。报告中显示的参数表示以下内容:
IFACE: 网络接口名称。
rxpck/s: 每秒接收的数据包数量。
txpck/s: 每秒发送的数据包数量。
rxkB/s: 每秒接收的数据量(以 KB 为单位)。
txkB/s: 每秒发送的数据量(以 KB 为单位)。
rxcmp/s: 每秒接收的压缩数据包数量。
txcmp/s: 每秒发送的压缩数据包数量。
rxmcst/s: 每秒接收的多播数据包数量。
通过这些参数,您可以了解网络接口在指定时间范围内的流量和使用情况。例如,您可以查看网络接口的流入和流出流量
如何通过sar命令的输出结果判断卡顿原因
如sar -u 主要看%idle
值 即 “cpu的空限值”
sar -r 最好结合free -h一起查看,%memused kbbuffers kbcached %commit,以及avalible等值都需要关注
sar-d 主要看 %util
值,即磁盘的读写繁忙程度
对于sar -n 监控网络流量
这个参数,笔者还不甚解,后面会接着更新相关的内容
要判断一个卡顿的产生,有时需要综合几个参数一起判断。任重而道远,这篇文章主要是为了学习sar命令的基础知识,sar命令有很多参数,这里还没有列举完,笔者也还在学习,sar命令还可以结合其他命令,如stress,ab
等命令做压力测试,以便更好的判断瓶颈,这里可以参考另一篇文章,这篇文章末尾解释了如何使用ab,stress等命令,至于具体如何分析瓶颈没有提到,待学习更新
附:有时使用sar命令可能会提示文件或目录不存在,这个时候检查一下对应的文件有没有,没有的话手工创建一下,或者使用-o选项指定一下文件,再一个是检查sysstat状态是否正常,systemctl status sysstat,因为sa1和sa2等工具都是sysstat工具包提供的
扩展
sar命令的全部参数
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
主选项和报告:
-b I/O 和传输速率信息状况
-B 分页状况
-d 块设备状况
-F [ MOUNT ]
Filesystems statistics
-H 交换空间利用率
-I { <中断> | SUM | ALL | XALL }
中断信息状况
-m { <关键词> [,…] | ALL }
电源管理统计信息
关键字:
CPU CPU 频率
FAN 风扇速度
\t\tFREQ\tCPU 平均时钟频率
IN 输入电压
TEMP 设备温度
\t\tUSB\t连接的USB 设备
-n { <关键词> [,…] | ALL }
网络统计信息
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)
-q 队列长度和平均负载
-r 内存利用率
-R 内存状况
-S 交换空间利用率
-u [ ALL ]
CPU 利用率
-v Kernel table 状况
-w 任务创建与系统转换统计信息
-W 交换信息
-y TTY 设备状况
在
sar命令的-v选项中
,file-nr表示文件句柄(file handle)的使用数量,inode-nr表示索引节点句柄(inode handle)的使用数量1。文件句柄是指向打开文件的指针,而索引节点句柄是指向索引节点的指针。索引节点是文件系统中用于存储文件元数据(如所有者、权限、创建时间等)的数据结构
sar -n 命令用于报告网络统计信息。它可以与不同的关键字一起使用,以报告不同类型的网络数据
。例如:
sar -n DEV 显示网络接口的统计信息,包括每个接口的接收和发送的数据包数量。
sar -n EDEV 显示有关网络接口错误的统计信息。
sar -n NFS 显示有关 NFS 客户端活动的统计信息。
sar -n NFSD 显示有关 NFS 服务器活动的统计信息。
sar -n SOCK 显示有关套接字使用情况的统计信息。
sar -n IP 显示有关 IP 流量的统计信息。
sar -n EIP 显示有关 IP 错误的统计信息。
sar -n ICMP 显示有关 ICMP 流量的统计信息。
sar -n EICMP 显示有关 ICMP 错误的统计信息。
sar -n TCP 显示有关 TCP 流量的统计信息。
sar -n ETCP 显示有关 TCP 错误的统计信息。
sar -n UDP 显示有关 UDP 流量的统计信息。
sar -r 命令用于报告内存使用情况
。报告中显示的参数表示以下内容:
kbmemfree:可用内存量(以 KB 为单位)。
kbmemused:已使用的内存量(以 KB 为单位)。
%memused:内存使用率百分比。
kbbuffers:用于缓冲区的内存量(以 KB 为单位)。
kbcached:用于缓存的内存量(以 KB 为单位)。
kbcommit:提交给应用程序使用的内存量(以 KB 为单位)。
%commit:提交给应用程序使用的内存量占总内存量的百分比。
kbactive:活动内存量(以 KB 为单位)。这是最近被访问过的内存页的数量。这些页通常包含应用程序和用户数据。
kbinact:非活动内存量(以 KB 为单位)。这是最近未被访问过的内存页的数量。这些页可能包含不再需要的数据,可以被回收以释放内存。
kbdirty:脏页数量(以 KB 为单位)。脏页是已修改但尚未写回磁盘的内存页。它们需要在回收内存之前写回磁盘。
通过这些参数,可以了解系统的内存使用情况,包括可用内存量、已使用内存量、缓冲区和缓存使用情况等。
==/var/log/sa/目录下的sa文件和sar文件有什么不同
saXX文件包含了操作系统在某一天内的系统活动数据,包括CPU利用率、内存利用率、磁盘I/O等等。是
二进制
文件
而sarXX文件则是对saXX文件的数据进行了处理和分析,生成了一些汇总和统计的报告,比如每小时、每天的CPU和内存利用率、磁盘I/O等,方便管理员进行系统性能排查和优化。是文本文件
所以说,saXX文件是原始的系统活动数据记录文件,sarXX文件则是根据saXX文件生成的报告文件。
sysstat支持很多工具包,其中包括sar, sadf, mpstat, iostat, tapestat, pidstat, cifsiostat and sa tools,
它们各自的功能如下:
sar:收集、报告和保存系统活动信息。
sadf:以多种格式(例如 CSV、XML、JSON 等) 显示 sar 命令的输出。
iostat:报告 CPU 统计信息和输入/输出统计信息,用于设备和分区。
mpstat:报告关于各个可用 CPU 的统计信息。
pidstat:报告关于各个进程的统计信息。
tapestat:报告磁带驱动器统计信息。
cifsiostat:报告 CIFS 文件系统统计信息。