• linux工具之sar


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

    我们可以使用sar命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。

    Linux 内核维护着一些内部计数器,这些计数器包含了所有的请求及其完成时间和 I/O 块数等信息,sar命令从所有的这些信息中计算出请求的利用率和比例,以便找出瓶颈所在。

    sar命令主要的用途是生成某段时间内所有活动的报告,因此必需确保sar`命令在适当的时间进行数据采集(而不是在午餐时间或者周末)

    命令参数

    用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
    
    主选项和报告:
    	-b	I/O 和传输速率信息状况
    	-B	分页状况
    	-d	块设备状况
    	-I { <中断> | SUM | ALL | XALL }
    		中断信息状况
    	-m	电源管理信息状况
    	-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 设备状况
    	-o {<文件路径>}
    	   将命令结果以二进制格式存放在指定文件中
    

    常用命令

    sar命令来自于sysstat工具包,如果提示sar命令不存在,需先安装sysstat

    网络统计信息

    sar -n <关键词> [ <时间间隔> [ <次数> ] ]
    

    示例:

    命令中 1 5 表示每一秒钟取 1 次值,一共取 5 次。

    命令执行后会列出每个网卡这 5 次取值的平均数据,根据实际情况来确定带宽跑满的网卡名称,

    CPU 利用率

    sar -u [ <时间间隔> [ <次数> ] ]
    

    示例:

    root@ubuntu:~# sar -u  1 3
    Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
    01:44:59 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    01:45:00 AM     all      0.50      0.00      2.50      0.00      0.00     97.00
    01:45:01 AM     all      1.02      0.00      1.53      0.00      0.00     97.45
    01:45:02 AM     all      2.01      0.00      3.52     11.56      0.00     82.91
    Average:        all      1.18      0.00      2.52      3.87      0.00     92.44
    root@ubuntu:~# 
    

    命令中 1 3 表示每一秒钟取 1 次值,一共取 3 次。

    输出项说明:

    CPU:all 表示统计信息为所有 CPU 的平均值。
    
    %user:显示在用户级别(application)运行使用 CPU 总时间的百分比
    
    %nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比
    	 即:用户进程空间内改变过优先级的进程占用CPU百分比
    
    %system:在核心级别(kernel)运行所使用 CPU 总时间的百分比
    
    %iowait:显示用于等待I/O操作占用 CPU 总时间的百分比
    
    %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比
    
    %idle:显示 CPU 空闲时间占用 CPU 总时间的百分比
    
        1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
    
        2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
    
        3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
    

    索引节点,文件和其他内核表的状态

    sar -v [ <时间间隔> [ <次数> ] ]
    

    示例:

    root@ubuntu:~# sar -v 1 3
    Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
    
    01:50:30 AM dentunusd   file-nr  inode-nr    pty-nr
    01:50:31 AM     10487      7104     28040         2
    01:50:32 AM     10487      7104     28040         2
    01:50:33 AM     10487      7104     28040         2
    Average:        10487      7104     28040         2
    root@ubuntu:~# 
    

    输出项说明:

    dentunusd:目录高速缓存中未被使用的条目数量
    
    file-nr:文件句柄(file handle)的使用数量
    
    inode-nr:索引节点句柄(inode handle)的使用数量
    
    pty-nr:使用的 pty 数量
    

    内存利用率

    sar -r [ <时间间隔> [ <次数> ] ]
    

    示例:

    root@ubuntu:~# sar -r 1 3
    Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
    
    01:51:59 AM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
    01:52:00 AM   6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       920
    01:52:01 AM   6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       920
    01:52:02 AM   6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       932
    Average:      6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       924
    root@ubuntu:~# 
    
    

    输出项说明:

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

    内存分页状况

    sar -B [ <时间间隔> [ <次数> ] ]
    

    示例:

    root@ubuntu:~# sar -B 1 3
    Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
    
    01:57:43 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
    01:57:44 AM      0.00      0.00     18.00      0.00      4.00      0.00      0.00      0.00      0.00
    01:57:45 AM      0.00      0.00      2.00      0.00      2.00      0.00      0.00      0.00      0.00
    01:57:46 AM      0.00      0.00      0.00      0.00      3.00      0.00      0.00      0.00      0.00
    Average:         0.00      0.00      6.67      0.00      3.00      0.00      0.00      0.00      0.00
    root@ubuntu:~# 
    

    输出项说明:

    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)的百分比
    

    I/O 和传输速率信息状况

    sar -b [ <时间间隔> [ <次数> ] ]
    

    示例:

    root@ubuntu:~# sar -b 1 3
    Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
    
    01:59:58 AM       tps      rtps      wtps   bread/s   bwrtn/s
    01:59:59 AM      2.00      0.00      2.00      0.00    128.00
    02:00:00 AM      0.00      0.00      0.00      0.00      0.00
    02:00:01 AM      0.00      0.00      0.00      0.00      0.00
    Average:         0.67      0.00      0.67      0.00     42.67
    root@ubuntu:~# 
    

    输出项说明:

    tps:每秒钟物理设备的 I/O 传输总量
    
    rtps:每秒钟从物理设备读入的数据总量
    
    wtps:每秒钟向物理设备写入的数据总量
    
    bread/s:每秒钟从物理设备读入的数据量,单位为:块/s
    
    bwrtn/s:每秒钟向物理设备写入的数据量,单位为:块/s
    

    队列长度和平均负载

    sar -q [ <时间间隔> [ <次数> ] ]
    

    示例:

    root@ubuntu:~# sar -q 1 3
    Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
    
    02:01:22 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
    02:01:23 AM         0       430      0.15      0.07      0.18         0
    02:01:24 AM         0       430      0.15      0.07      0.18         0
    02:01:25 AM         0       431      0.15      0.07      0.18         0
    Average:            0       430      0.15      0.07      0.18         0
    root@ubuntu:~# 
    

    输出项说明:

    runq-sz:运行队列的长度(等待运行的进程数)
    
    plist-sz:进程列表中进程(processes)和线程(threads)的数量
    
    ldavg-1:最后1分钟的系统平均负载(System load average)
    
    ldavg-5:过去5分钟的系统平均负载
    
    ldavg-15:过去15分钟的系统平均负载
    
    blocked:当前阻塞的任务数,等待I / O完成
    

    系统交换信息

    sar -q [ <时间间隔> [ <次数> ] ]
    

    示例:

    [root@node-1 yum.repos.d]#  sar -W 5 3
    Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)
    
    05:19:59 PM  pswpin/s pswpout/s
    05:20:04 PM      0.00      0.00
    05:20:09 PM      0.00     64.00
    05:20:14 PM      0.00      0.00
    Average:         0.00     21.33
    [root@node-1 yum.repos.d]# 
    
    

    输出项说明:

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

    块设备状况

    sar -d [ <时间间隔> [ <次数> ] ]
    

    示例:

    [root@node-1 ~]# sar -d 1 3
    Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)
    
    05:21:21 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    05:21:22 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:22 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:22 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:22 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:22 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    05:21:22 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    05:21:23 PM    dev8-0      3.00      0.00    192.00     64.00      0.00      0.00      0.00      0.00
    05:21:23 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:23 PM  dev253-0     24.00      0.00    192.00      8.00      0.00      0.00      0.00      0.00
    05:21:23 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:23 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    05:21:23 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    05:21:24 PM    dev8-0      4.00      8.00    160.00     42.00      0.00      0.00      0.00      0.00
    05:21:24 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:24 PM  dev253-0     18.00      8.00    160.00      9.33      0.00      0.00      0.00      0.00
    05:21:24 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    05:21:24 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    Average:       dev8-0      2.33      2.67    117.33     51.43      0.00      0.00      0.00      0.00
    Average:      dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    Average:     dev253-0     14.00      2.67    117.33      8.57      0.00      0.00      0.00      0.00
    Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    Average:     dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    [root@node-1 ~]# 
    
    

    输出项说明:

    参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
    
    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的百分比,比率越大,说明越饱和.
    
    注意:
    1. avgqu-sz 的值较低时,设备的利用率较高。
    2. 当%util的值接近 1% 时,表示设备带宽已经占满。
    

    输出统计的数据信息

    示例:

    [root@node-1 ~]# sar -o sarfile.log -u 1 3
    Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)
    05:24:18 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    05:24:19 PM     all     16.96      0.00      4.68      0.00      0.00     78.35
    05:24:20 PM     all      5.68      0.00      1.26      0.00      0.00     93.06
    05:24:21 PM     all      8.06      0.00      3.53      0.00      0.00     88.41
    Average:        all     10.23      0.00      3.16      0.00      0.00     86.62
    [root@node-1 ~]# 
    

    上述示例命令会将sar -u 1 3采集到的数据以二进制的格式存放到文件sarfile.log中。

    我们还可以通过命令sadf -d sarfile.log将二进制数据文件转换成数据库可读的格式。

    sadf -d sarfile.log | sed 's/;/,/g' > sarfile.csv

    也可以将这些数据存储在一个 csv 文档中,然后绘制成图表展示方式,如下所示:

    从数据文件读取信息

    sar -f <文件路径>
    

    示例:

    又将之前存储在二进制文件中的数据给读取并展示出来。

    [root@node-1 ~]# sar -f sarfile.log
    Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)
    
    05:24:18 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    05:24:19 PM     all     16.96      0.00      4.68      0.00      0.00     78.35
    05:24:20 PM     all      5.68      0.00      1.26      0.00      0.00     93.06
    05:24:21 PM     all      8.06      0.00      3.53      0.00      0.00     88.41
    Average:        all     10.23      0.00      3.16      0.00      0.00     86.62
    [root@node-1 ~]# 
    
    

    性能问题排查技巧

    • 怀疑 CPU 存在瓶颈,可用sar -usar -q等来查看
    • 怀疑内存存在瓶颈,可用sar -Bsar -rsar -W等来查看
    • 怀疑 I/O 存在瓶颈,可用sar -bsar -usar -d等来查看
  • 相关阅读:
    go 1.14.3安装micro报错处理记录
    关于redis哨兵机制的一些疑问
    TCP中异常关闭的情况记录
    mysql sleep 死锁例子
    ubuntu16.04 安装go
    innodb存储引擎之内存
    ubuntu16.04环境LNMP实现PHP5.6和PHP7.2
    mysql使用存储过程,批量生成测试数据
    mysql 关于字符串搜索的函数
    电脑上的windows键突然失灵了,肿么办
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/11543829.html
Copyright © 2020-2023  润新知