前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux:sar命令

Linux:sar命令

原创
作者头像
HLee
修改2021-08-11 10:56:59
2.6K1
修改2021-08-11 10:56:59
举报
文章被收录于专栏:房东的猫房东的猫

sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动及 IPC 有关的活动等。我们可以使用sar命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。

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

  • 怀疑 CPU 存在瓶颈,可用sar -usar -q等来查看
  • 怀疑内存存在瓶颈,可用sar -Bsar -rsar -W等来查看
  • 怀疑 I/O 存在瓶颈,可用sar -bsar -usar -d等来查看

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

代码语言:javascript
复制
语法:sar (选项) (参数)

选项:
    -A:显示所有的报告信息;
    -b:显示I/O速率;
    -B:显示换页状态;
    -c:显示进程创建活动;
    -d:显示每个块设备的状态;
    -e:设置显示报告的结束时间;
    -f:从指定文件提取报告;
    -i:设状态信息刷新的间隔时间;
    -P:报告每个CPU的状态;
    -R:显示内存状态;
    -u:显示CPU利用率;
    -v:显示索引节点,文件和其他内核表的状态;
    -w:显示交换分区状态;
    -x:显示给定进程的状态。
    
参数:
    间隔时间:每次报告的间隔时间(秒)
    次数:显示报告的次数

例:察看内存和交换空间的使用率:sar -r

代码语言:javascript
复制
[logdev@idc1 ~]$ sar -r
Linux 2.6.32-504.el6.x86_64 (idc1) 	08/10/2021 	_x86_64_	(8 CPU)

12:00:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
12:10:01 AM    210616   7848288     97.39    212464   4734488   2930956     28.86
12:20:02 AM    227608   7831296     97.18    212472   4718892   2932360     28.87
12:30:01 AM    141564   7917340     98.24    212472   4804940   2933000     28.88
12:40:01 AM    156448   7902456     98.06    212476   4789716   2930712     28.86

说明:
    kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)
    kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。

网络统计信息

代码语言:javascript
复制
sar -n <关键词> [ <时间间隔> [ <次数> ] ]

例:命令中 1 5 表示每一秒钟取 1 次值,一共取 5 次:sar -n DEV 1 5

代码语言:javascript
复制
[logdev@.idc1 ~]$ sar -n DEV 1 5
Linux 2.6.32-504.el6.x86_64 (idc1) 	08/10/2021 	_x86_64_	(8 CPU)

06:16:04 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
06:16:05 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
06:16:05 PM      eth0    236.63    161.39     74.14     68.53      0.00      0.00      0.00

06:16:05 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
06:16:06 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
06:16:06 PM      eth0    198.00    134.00     59.61     68.61      0.00      0.00      0.00

06:16:06 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
06:16:07 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
06:16:07 PM      eth0    174.00    109.00     62.63     58.79      0.00      0.00      0.00

06:16:07 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
06:16:08 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
06:16:08 PM      eth0    294.00    267.00     65.01     64.36      0.00      0.00      0.00

06:16:08 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
06:16:09 PM        lo      2.02      2.02      0.10      0.10      0.00      0.00      0.00
06:16:09 PM      eth0    457.58    395.96    269.14    265.13      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.40      0.40      0.02      0.02      0.00      0.00      0.00
Average:         eth0    271.60    213.00    105.72    104.69      0.00      0.00      0.00

备注:命令执行后会列出每个网卡这 5 次取值的平均数据,根据实际情况来确定带宽跑满的网卡名称,默认情况下 eth0 为内网网卡,eth1 为外网网卡。

CPU 利用率

代码语言:javascript
复制
sar -u [ <时间间隔> [ <次数> ] ]

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

代码语言:javascript
复制
[logdev@idc1 ~]$ sar -u 1 3
Linux 2.6.32-504.el6.x86_64 (idc1) 	08/10/2021 	_x86_64_	(8 CPU)

06:21:33 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:21:34 PM     all      0.62      0.00      0.38      0.00      0.12     98.88
06:21:35 PM     all      1.87      0.00      1.25      0.00      0.25     96.63
06:21:36 PM     all      0.38      0.00      0.63      0.00      0.13     98.87
Average:        all      0.96      0.00      0.75      0.00      0.17     98.12

输出项说明:

代码语言:javascript
复制
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比
%nice:显示在用户级别,用于nice操作,所占用 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

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

代码语言:javascript
复制
sar -v [ <时间间隔> [ <次数> ] ]

例:sar -v 1 3

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

内存利用率

代码语言:javascript
复制
sar -r [ <时间间隔> [ <次数> ] ]

例:sar -r 1 3

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

内存分页状况

代码语言:javascript
复制
sar -B [ <时间间隔> [ <次数> ] ]

例:sar -B 1 3

输出项说明:
    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 和传输速率信息状况

代码语言:javascript
复制
sar -b [ <时间间隔> [ <次数> ] ]

例:sar -b 1 3

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

队列长度和平均负载

代码语言:javascript
复制
sar -q [ <时间间隔> [ <次数> ] ]

例:sar -q 1 3

输出项说明:
    runq-sz:运行队列的长度(等待运行的进程数)
    plist-sz:进程列表中进程(processes)和线程(threads)的数量
    ldavg-1:最后1分钟的系统平均负载(System load average)
    ldavg-5:过去5分钟的系统平均负载
    ldavg-15:过去15分钟的系统平均负载

系统交换信息

代码语言:javascript
复制
sar -W [ <时间间隔> [ <次数> ] ]

例:sar -W 1 3

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

块设备状况

代码语言:javascript
复制
sar -d [ <时间间隔> [ <次数> ] ]

例:sar -d 1 3

输出项说明:
    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% 时,表示设备带宽已经占满

输出统计的数据信息

代码语言:javascript
复制
sar -o path_file [选项] [ <时间间隔> [ <次数> ] ]

例:将sar -u 1 3采集到的数据以二进制的格式存放到文件sarfile.log

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

代码语言:javascript
复制
sadf -d sarfile.log

# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
upfor163;1;2018-04-25 03:15:02 UTC;-1;0.00;0.00;0.50;0.50;0.00;99.00
upfor163;1;2018-04-25 03:15:03 UTC;-1;1.01;0.00;0.00;0.00;0.00;98.99
upfor163;1;2018-04-25 03:15:04 UTC;-1;0.00;0.00;0.00;0.00;0.00;100.00

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

代码语言:javascript
复制
sadf -d sarfile.log | sed 's/;/,/g' > sarfile.csv

从数据文件读取信息

代码语言:javascript
复制
sar -f <文件路径>

例:sar -f sarfile.log

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档