一、命令使用介绍

sar命令全称 System Activity Report,它非常全能,可以分析linux系统各个维度的指标。包括:

  • 文件的读写情况
  • 系统调用的使用情况
  • 磁盘I/O
  • CPU效率
  • 内存使用状况(包括内存页面的置换)
  • 进程活动
  • IPC有关的活动
  • 网卡相关信息

他的命令常用格式如下:

sar [options] [-A] [-o file] t [n]

其中t为采样间隔,n为采样次数,默认值是1;-o file表示将命令结果以二进制格式存放在文件中,file是文件名;options为命令行选项,sar常用的选项有以下(主要各个维度的对应参数信息):

  • -A:所有报告的总和
  • -u:输出CPU使用情况的统计信息
  • -q:输出cpu等待队列的长度相关统计信息
  • -v:输出inode、文件和其他内核表的统计信息
  • -d:输出每一个块设备的活动信息
  • -r:输出内存和交换空间的统计信息
  • -b:显示I/O和传送速率的统计信息
  • -a:文件读写情况
  • -c:输出进程统计信息,每秒创建的进程数
  • -R:输出内存页面的统计信息
  • -y:终端设备活动情况
  • -w:输出系统交换活动信息

二、系统各个维度的性能分析

1、CPU相关指标

和CPU相关的指标的参数主要有 -P、-u、-q。

1.1、 -P 或者 -u 输出CPU使用情况的统计信息

其中-u是输出cpu总的相关性能指标,-P可以指定输出某一个cpu的指标(会把cpu一个个列出来)

# 获取cpu的一个总的信息(默认就是-u)
sar 2 2 
sar -u 2 2
# 输出更详细一些的报表
sar -u ALL 2 2
# 获取某一个cpu的信息
sar -P 1 2 2
# 获取所有cpu的信息
sar -P ALL 22

输出:

03:47:05 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:47:07 PM     all      3.88      0.00      0.19      0.06      0.00     95.87
03:47:09 PM     all      4.06      0.00      0.22      0.11      0.00     95.61
Average:        all      3.97      0.00      0.20      0.09      0.00     95.74

相关指标含义:

  • %user:CPU处在用户模式下的时间百分比
  • %nice:CPU处在带NICE值的用户模式下的时间百分比
  • %system:CPU处在系统模式下的时间百分比
  • %iowait:CPU等待输入输出完成时间的百分比
  • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
  • %idle:CPU空闲时间百分比

1.2、 -q 输出CPU队列的相关统计信息

sar -q 2 2

输出:

03:54:30 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
03:54:32 PM         2      2798      1.79      1.43      1.46
03:54:34 PM         2      2797      1.79      1.43      1.46
Average:            2      2798      1.79      1.43      1.46

相关指标含义:

  • runq-sz:运行队列的长度(等待运行的进程数);
  • plist-sz:进程列表中进程(processes)和线程(threads)的数量,很多线程可能在休眠中
  • ldavg-1:最后1分钟的系统平均负载;
  • ldavg-5:过去5分钟的系统平均负载;
  • ldavg-15:过去15分钟的系统平均负载;

2、磁盘相关指标(建议用iostat)

我们可以通过-b、-d来输出磁盘的相关指标。通过

2.1、 -b 输出磁盘基本信息

sar -b 2 2

输出:

04:10:11 PM       tps      rtps      wtps   bread/s   bwrtn/s
04:10:13 PM    101.52      0.00    101.52      0.00    921.83
04:10:15 PM    117.01      0.00    117.01      0.00   1150.52
Average:       109.21      0.00    109.21      0.00   1035.29

相关指标含义:

  • tps:采样期间I/O的请求数,多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的
  • rtps:采样期间内的io读请求数
  • wtps:采样期间内的io写请求数
  • bread/s:采样期间内的io读的块数
  • bwrtn/s:采样期间内的io写的块数

2.2、-d 输出磁盘更详细的信息

sar -d 2 2

输出:

04:13:39 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
04:13:41 PM  dev8-144      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM   dev8-80      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM   dev8-32      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM  dev8-112      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM  dev8-128      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM   dev8-96      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM   dev8-64      1.00      0.00     16.00     16.00      0.01     13.00     13.00      1.30
04:13:41 PM  dev8-160      1.50      0.00     28.00     18.67      0.02     14.67      8.67      1.30
04:13:41 PM   dev8-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:13:41 PM   dev8-48      1.00      0.00     12.00     12.00      0.01     12.50     12.50      1.25
04:13:41 PM    dev8-0      2.50      0.00     92.00     36.80      0.02      9.20      9.20      2.30

相关指标含义:

  • DEV:磁盘设备;
  • 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的百分比,比率越大,说明越饱;

2.3、 小结

sar的磁盘指标和iostat输出的其实基本是一样的。但是iostat可以输出磁盘的名称,我们可以通过df -h找到对应的磁盘是哪个目录。而sar的-b不是以单个磁盘为粒度,-d虽然有输出DEV,但和df -h输出的磁盘名称好像对应不上。因此,个人建议还是iostat比较好用:

https://blog.csdn.net/u013332124/article/details/98352716

3、内存相关指标(-n 参数)

通过 -B、-r、-W 来查看内存的相关指标

3.1、-r 查看内存的使用情况

sar -r 2 2

输出:

05:37:07 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
05:37:09 PM   2717548  46656484     94.50    297688   3473964  70040892    105.88
05:37:11 PM   2717416  46656616     94.50    297692   3473972  70038520    105.88
Average:      2717482  46656550     94.50    297690   3473968  70039706    105.88

相关指标含义:

  • kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffercache的空间;
  • kbmemused:这个值和free命令中的used值基本一致,所以它包括buffercache的空间;
  • %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比;
  • kbbuffers:这两个值就是free命令中的buffer
  • kbcached:这两个值就是free命令中的cache
  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM + swap);
  • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比;

3.2、-B 查看内存分页的情况

sar -B 2 2

输出:

05:39:43 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
05:39:45 PM      0.00     56.57   4540.91      0.00   1527.27      0.00      0.00      0.00      0.00
05:39:47 PM      0.00     50.25   4522.11      0.00   1455.78      0.00      0.00      0.00      0.00
Average:         0.00     53.40   4531.49      0.00   1491.44      0.00      0.00      0.00      0.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)的百分比;

3.3、-W 查看SWAP交换的统计信息

sar -W 2 2

输出:

05:41:40 PM  pswpin/s pswpout/s
05:41:42 PM      0.00      0.00
05:41:44 PM      0.00      0.00
Average:         0.00      0.00

相关指标含义:

  • pswpin/s:每秒从交换分区到系统的交换页面(swap page)数量
  • pswpout/s:每秒从系统交换到swap的交换页面(swap page)的数量

4、网络相关指标

使用姿势:

# keyword 表示不同的几个开关。包括: DEV | EDEV | NFS | NFSD | SOCK
# 每个开关输出的信息都不一样
sar -n {keyword} or {ALL}
  • DEV : 显示网络接口信息
  • EDEV : 显示关于网络错误的统计数据
  • NFS : 显示NFS客户端信息
  • NFSD : 显示NFS服务器信息
  • SOCK : 显示套接字信息

4.1、网络接口相关信息

sar -n DEV 2 2 

输出:

05:48:11 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
05:48:13 PM        lo      7.50      7.50      0.69      0.69      0.00      0.00      0.00
05:48:13 PM       em1      5.00      8.00      0.60      0.94      0.00      0.00      0.00
05:48:13 PM       em2     19.00      8.00      2.50      1.44      0.00      0.00      2.00
05:48:13 PM       em3      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:13 PM       em4      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:13 PM     bond0     24.00     16.00      3.09      2.37      0.00      0.00      2.00

相关指标含义:

  • IFACE:LAN接口网络设备的名称;
  • rxpck/s:每秒钟接收的数据包;
  • txpck/s:每秒钟发送的数据包;
  • rxkB/s:每秒钟接收的字节数;
  • txkB/s:每秒钟发送的字节数;
  • rxcmp/s:每秒钟接收的压缩数据包;
  • txcmp/s:每秒钟发送的压缩数据包;
  • rxmcst/s:每秒钟接收的多播数据包;

4.2、网络错误的统计数据

sar -n EDEV 2 2

输出:

05:49:25 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
05:49:27 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:49:27 PM       em1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:49:27 PM       em2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:49:27 PM       em3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:49:27 PM       em4      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:49:27 PM     bond0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

相关指标含义:

  • IFACE:LAN接口网络设备的名称;
  • rxerr/s:每秒钟接收的坏数据包;
  • txerr/s:每秒钟发送的坏数据包;
  • coll/s:每秒冲突数;
  • rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数;
  • txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数;
  • txcarr/s:发送数据包时,每秒载波错误数;
  • rxfram/s:每秒接收数据包的帧对齐错误数;
  • rxfifo/s:接收的数据包每秒FIFO过速的错误数;
  • txfifo/s:发送的数据包每秒FIFO过速的错误数

4.3、 查看套接字相关信息

sar -n SOCK 2 2

输出:

05:51:14 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
05:51:16 PM       436       277         5         0         0         0
05:51:18 PM       435       276         5         0         0         0
Average:          436       276         5         0         0         0

相关指标含义:

  • totsck:使用的套接字总数量;
  • tcpsck:使用的TCP套接字数量;
  • udpsck:使用的UDP套接字数量;
  • rawsck:使用的RAW套接字数量;
  • ip-frag:当前的IP分片的数目;
  • tcp-tw:TCP套接字中处于TIME-WAIT状态的连接数量

三、其他

1、关于输出二进制文件和读取sa二进制文件

通过-o参数,可以将性能报告输出到指定的文件中。不过这个文件是二进制的,需要查看具体的信息还是需要通过sar命令来打开解析。

# 输出到指定的文件
sar -o /tmp/sa.test 2 2
# 解析某个sar二进制文件
sar -f /tmp/sa.test

2、关于sysstat包

sarsa1sa2命令都是sysstat包的一部分。它是Linux包含的性能监视工具集合。

  • sar:显示数据
  • sa1sa2:收集和保存数据用于以后分析。sa2shell脚本在/var/log/sa目录中每日写入一个报告。sa1shell脚本将每日的系统活动信息以二进制数据的形式写入到文件中。

我们可以在/etc/cron.d/sysstat文件中找到sar默认的cron作业,如下:

# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

这样我们就可以按照我们的需求,进行输出定制化了。

sar不止上面说的几个程序:

  • sar:收集、报告或存储信息(CPU、内存、磁盘、中断、网卡、TTY、内核表等等);
  • sadc:系统数据收集器,给sar做后台服务;
  • sa1:收记并存储二进制数据到每天的文件;这是设计来给cron执行一个sadc的前台程序;
  • sa2:生成总结报表;
  • sadf:以多种格式显示数据(CSV, XML, JSON, etc.),还可以用来生成SVG(Scalable Vector Graphics)图表。

参考资料

https://www.jellythink.com/archives/483

https://blog.csdn.net/macky0668/article/details/6839525

Logo

更多推荐