果冻想
认真玩技术的地方

Linux sar命令详解

前言

说来不怕大家笑话,这个命令我没有接触过,那更是没有用过的。本来很早就想写一篇关于sar命令的总结,一来想熟悉一下这个命令,二来整个Linux系统性能监控系列需要这个命令来做一下补充。奈何自己太懒,不想去啃下这么复杂而又麻烦的命令,但是这不就是学习的快乐吗?

命令简介

sar是系统活动报告(System Activity Report)英文单词的首字母缩写。就像它的名字一样,sar是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

我们可以使用sar命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。这么一说来,感觉就是sar在手,天下我有!!!

命令详解

为什么一开始我就说sar是一个复杂而又麻烦的命令呢?这并不是说sar这个命令有多么的难用,而是这个命令输出的内容太多,覆盖面太广,而这也就验证了它是“目前Linux上最为全面的系统性能分析工具之一”这句话。

废话不多说,下面就开始sar命令的干货总结。

sar命令常用格式如下:

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

其中t为采样间隔,n为采样次数,默认值是1;-o file表示将命令结果以二进制格式存放在文件中,file是文件名;options为命令行选项,sar常用的选项有以下:

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

在继续讲解之前,我们再来简单说一下sysstat包。

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)图表。

使用实例

接下来我们说说sar实际生产使用实例,通过实际操作总结出的经验来和大家分享。

  • 命令:sar 2 3
    说明:每2秒采样一次,连续采样3次,查看CPU的整体使用情况
    输出:

    Linux 3.10.0-693.2.2.el7.x86_64 (jellythink)    03/09/2019      _x86_64_        (1 CPU)
    
    10:05:46 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    10:05:48 PM     all      0.50      0.00      0.50      0.00      0.00     98.99
    10:05:50 PM     all      1.00      0.00      0.50      0.00      0.00     98.50
    10:05:52 PM     all      0.50      0.00      0.50      0.00      0.00     98.99
    Average:        all      0.60      0.00      0.40      0.00      0.00     99.00
    

    输出内容详解:

    • %user:CPU处在用户模式下的时间百分比;之前总结的好多命令都有讲,比如iostatpidstat都有讲;
    • %nice:CPU处在带NICE值的用户模式下的时间百分比;
    • %system:CPU处在系统模式下的时间百分比;
    • %iowait:CPU等待输入输出完成时间的百分比;
    • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比;
    • %idle:CPU空闲时间百分比;

    在所有的显示中,我们应主要注意%iowait%idle%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

  • 命令:sar -P ALL 2 3
    说明:每2秒采样一次,连续采样3次,查看CPU每个核心的使用情况
    输出:

    10:37:48 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    10:37:50 PM     all      0.50      0.00      0.00      0.00      0.00     99.50
    10:37:50 PM       0      0.50      0.00      0.00      0.00      0.00     99.50
    
    10:37:50 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    10:37:52 PM     all      1.00      0.00      0.50      0.00      0.00     98.50
    10:37:52 PM       0      1.00      0.00      0.50      0.00      0.00     98.50
    
    10:37:52 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    10:37:54 PM     all      0.51      0.00      0.00      0.00      0.00     99.49
    10:37:54 PM       0      0.51      0.00      0.00      0.00      0.00     99.49
    
  • 命令:sar -r 2 3
    说明:每2秒采样一次,连续采样3次,查看内存的使用情况
    输出:

    10:45:12 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
    10:45:14 PM    427592   1455904     77.30     54876    132064   2004276     32.98    790672    558092        32
    10:45:16 PM    427592   1455904     77.30     54880    132064   2004276     32.98    790676    558092        32
    10:45:18 PM    427592   1455904     77.30     54880    132064   2004276     32.98    790676    558096        44
    Average:       427592   1455904     77.30     54879    132064   2004276     32.98    790675    558093        36
    

    输出内容详解:

    • kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffercache的空间;
    • kbmemused:这个值和free命令中的used值基本一致,所以它包括buffercache的空间;
    • %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比;
    • kbbuffers:这两个值就是free命令中的buffer
    • kbcached:这两个值就是free命令中的cache
    • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM + swap);
    • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比;
    • kbactive:活动内存量(以千字节计算)(最近使用的内存,通常不会被收回,除非绝对必要);
    • kbinact:不活动内存量(以千字节计算的内存(最近使用的内存),更有资格被用于其他目的);
    • kbdirty:以KB为单位的内存量等待写入磁盘;
  • 命令:sar -B 2 3
    说明:每2秒采样一次,连续采样3次,查看内存分页的使用情况
    输出:

    11:06:26 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
    11:06:28 PM      0.00      8.00     35.00      0.00     11.50      0.00      0.00      0.00      0.00
    11:06:30 PM      0.00      0.00     15.00      0.00     11.50      0.00      0.00      0.00      0.00
    11:06:32 PM      0.00      0.00     49.49      0.00   1102.02      0.00      0.00      0.00      0.00
    Average:         0.00      2.68     33.11      0.00    372.58      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)的百分比;
  • 命令:sar -d -p 2 3
    说明:每2秒采样一次,连续采样3次,查看块设备使用情况
    输出:

    10:00:48 PM  DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    10:00:50 PM  vda      1.01      0.00     20.10     20.00      0.00      1.50      1.50      0.15
    
    10:00:50 PM  DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    10:00:52 PM  vda      5.53      0.00    112.56     20.36      0.01      1.27      0.82      0.45
    
    10:00:52 PM  DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    10:00:54 PM  vda     42.00      0.00   2312.00     55.05      0.19      4.62      0.27      1.15
    
    Average:     DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    Average:     vda     16.22      0.00    817.39     50.39      0.07      4.18      0.36      0.59
    

    输出内容详解:

    • 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的百分比,比率越大,说明越饱;
  • 命令:sar -n ALL 2 3
    说明:-n选项在sar命令中被用来生成网络使用情况的统计报告;使用语法如下为:

    sar -n {keyword} or {ALL}
    

    -n选项使用6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALLDEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。

    • 示例1:sar -n DEV 2 3
      输出:

      10:23:07 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
      10:23:09 PM      eth0      5.50      4.50      0.41      3.56      0.00      0.00      0.00
      10:23:09 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      10:23:09 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
      10:23:11 PM      eth0      0.51      0.51      0.03      0.03      0.00      0.00      0.00
      10:23:11 PM        lo      1.52      1.52      0.09      0.09      0.00      0.00      0.00
      
      10:23:11 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
      10:23:13 PM      eth0      5.50      6.00      3.09      0.94      0.00      0.00      0.00
      10:23:13 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
      Average:         eth0      3.85      3.68      1.18      1.51      0.00      0.00      0.00
      Average:           lo      0.50      0.50      0.03      0.03      0.00      0.00      0.00
      

      输出内容详解:

      • IFACE:LAN接口网络设备的名称;
      • rxpck/s:每秒钟接收的数据包;
      • txpck/s:每秒钟发送的数据包;
      • rxkB/s:每秒钟接收的字节数;
      • txkB/s:每秒钟发送的字节数;
      • rxcmp/s:每秒钟接收的压缩数据包;
      • txcmp/s:每秒钟发送的压缩数据包;
      • rxmcst/s:每秒钟接收的多播数据包;
    • 示例2:sar -n EDEV 2 3
      输出:

      10:26:12 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
      10:26:14 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:26:14 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      10:26:14 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
      10:26:16 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:26:16 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      10:26:16 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
      10:26:18 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:26:18 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      Average:        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
      Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      Average:           lo      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过速的错误数
    • 示例3:sar -n SOCK 2 3
      输出:

      10:29:34 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
      10:29:36 PM       142        10         3         0         0         6
      10:29:38 PM       142        10         3         0         0         7
      10:29:40 PM       142        10         3         0         0         7
      Average:          142        10         3         0         0         7
      

      输出内容详解:

      • totsck:使用的套接字总数量;
      • tcpsck:使用的TCP套接字数量;
      • udpsck:使用的UDP套接字数量;
      • rawsck:使用的RAW套接字数量;
      • ip-frag:当前的IP分片的数目;
      • tcp-tw:TCP套接字中处于TIME-WAIT状态的连接数量
  • 命令:sar -r -f /var/log/sa/sa04
    说明:前面已经说了sar的日志文件是保存在/var/log/sa/saDD里的。我们可以使用-f选项可以查看二进制日志文件;-r表示读取内存日志信息。

  • 命令:sar -q 2 3
    说明:每2秒采样一次,连续采样3次,查看进程队列长度和平均负载状态
    输出:

    10:41:02 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
    10:41:04 PM         0       195      0.02      0.03      0.05         0
    10:41:06 PM         0       195      0.02      0.03      0.05         0
    10:41:08 PM         0       195      0.02      0.03      0.05         0
    Average:            0       195      0.02      0.03      0.05         0
    

    输出内容详解:

    • runq-sz:运行队列的长度(等待运行的进程数);
    • plist-sz:进程列表中进程(processes)和线程(threads)的数量;
    • ldavg-1:最后1分钟的系统平均负载;
    • ldavg-5:过去5分钟的系统平均负载;
    • ldavg-15:过去15分钟的系统平均负载;
    • blocked:当前阻塞的进程数量,在等待IO完成;
  • 命令:sar -W 2 3
    说明:每2秒采样一次,连续采样3次,查看系统SWAP交换的统计信息(监控状态同vmstatsiso
    输出:

    11:13:28 PM  pswpin/s pswpout/s
    11:13:30 PM      0.00      0.00
    11:13:32 PM      0.00      0.00
    11:13:34 PM      0.00      0.00
    Average:         0.00      0.00
    

    输出内容详解:

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

性能分析小技巧

  • 技巧一:要判断系统瓶颈问题,有时需几个sar命令选项结合起来:
    • 怀疑CPU存在瓶颈,可用sar -usar -q等来查看;
    • 怀疑内存存在瓶颈,可用sar -Bsar -rsar -W等来查看;
    • 怀疑I/O存在瓶颈,可用sar -bsar -usar -d等来查看;
  • 技巧二:巧用sadf命令,转换成各种可读形式高的文件格式,进行线下分析。sar -o会将输出保存为二进制文件,我们可以通过sadf -d将二进制文件进行转换。

  • 技巧三:如果你觉的上述通过sadf命令进行转换比较麻烦,也好,还有开源的ksar工具,可以直接加载sar生成的日志文件,通过GUI显示,更直观,更便捷。

总结

最近内心狂暴,都没有办法冷静下来写文章,这篇文章前前后后写了快一个星期了,好歹是总结完成了,自己也全面的学习了sar命令,通过这次总结,我也重新认识了sar命令,希望我的总结对你的学习之路有那么一点点帮助。最后,如果觉的我总结的还不错,对你有帮助,那就点击下方的打赏按钮,支持一下哈!

果冻想,认真玩技术的地方。

2019年3月10日,于内蒙古呼和浩特。

赞(3) 打赏
未经允许不得转载:果冻想 » Linux sar命令详解
关注微信公众号
关注微信公众号和果冻一起分享你的疑惑与心得。
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

玩技术,我们是认真的

联系我们关于果冻

请我喝杯咖啡也是不错的

支付宝扫一扫打赏

微信扫一扫打赏