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 [ <时间间隔> [ <次数> ] ]

示例:

[email protected]:~# 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
[email protected]:~# 

命令中 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 [ <时间间隔> [ <次数> ] ]

示例:

[email protected]:~# 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
[email protected]:~# 

输出项说明:

dentunusd:目录高速缓存中未被使用的条目数量

file-nr:文件句柄(file handle)的使用数量

inode-nr:索引节点句柄(inode handle)的使用数量

pty-nr:使用的 pty 数量

内存利用率

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

示例:

[email protected]:~# 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
[email protected]:~#

输出项说明:

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 [ <时间间隔> [ <次数> ] ]

示例:

[email protected]:~# 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
[email protected]:~# 

输出项说明:

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 [ <时间间隔> [ <次数> ] ]

示例:

[email protected]:~# 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
[email protected]:~# 

输出项说明:

tps:每秒钟物理设备的 I/O 传输总量

rtps:每秒钟从物理设备读入的数据总量

wtps:每秒钟向物理设备写入的数据总量

bread/s:每秒钟从物理设备读入的数据量,单位为:块/s

bwrtn/s:每秒钟向物理设备写入的数据量,单位为:块/s

队列长度和平均负载

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

示例:

[email protected]:~# 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
[email protected]:~# 

输出项说明:

runq-sz:运行队列的长度(等待运行的进程数)

plist-sz:进程列表中进程(processes)和线程(threads)的数量

ldavg-1:最后1分钟的系统平均负载(System load average)

ldavg-5:过去5分钟的系统平均负载

ldavg-15:过去15分钟的系统平均负载

blocked:当前阻塞的任务数,等待I / O完成

系统交换信息

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

示例:

[[email protected] 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
[[email protected] yum.repos.d]#

输出项说明:

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

块设备状况

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

示例:

[[email protected] ~]# 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
[[email protected] ~]#

输出项说明:

参数-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% 时,表示设备带宽已经占满。

输出统计的数据信息

示例:

[[email protected] ~]# 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
[[email protected] ~]# 

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

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

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

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

从数据文件读取信息

sar -f <文件路径>

示例:

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

[[email protected] ~]# 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
[[email protected] ~]#

性能问题排查技巧

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

原文地址:https://www.cnblogs.com/mrwuzs/p/11543829.html

时间: 2024-11-05 11:20:40

linux工具之sar的相关文章

Linux工具参考篇(网摘)

Linux工具参考篇 原文出处:[Linux Tools Quick Tutorial] 1. gdb 调试利器 2. ldd 查看程序依赖库 3. lsof 一切皆文件 4. ps 进程查看器 5. pstack 跟踪进程栈 6. strace 跟踪进程中的系统调用 7. ipcs 查询进程间通信状态 8. top linux下的任务管理器 9. free 查询可用内存 10. vmstat 监视内存使用情况 11. iostat 监视I/O子系统 12. sar 找出系统瓶颈的利器 13.

Linux 下使用 Sar 简介

Linux 下使用 Sar 简介 提交 我的留言 加载中 已留言 介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等).Linux 下也有法国人写的 sysstat 实现了这个工具的功能. 它的原理就是使用 cron 定期调度一个程序,收集当前系统各项性能指标,保存在二进制文件里. 安装 可以下载源码,自己编译安装,也可以安装二进制包.RHEL 系统默认已经安装. 主要功能 支持功能: 可以收集几乎所有的系统性能数据.

发布《Linux工具快速教程》

发布<Linux工具快速教程> 阶段性的完成了这本书开源书籍,发布出来给有需要的朋友,同时也欢迎更多的朋友加入进来,完善这本书: 本书Github地址:https://github.com/me115/linuxtools_rst 在线阅读 缘起 Linux下有很多命令行工具供我们使用,每个工具总是提供了大量参数供我们选择: 实际工作中,我们用到的工具,最常用的总是那么几个参数组合: 为此,我写了这本相对实用的书: 这本书专注于Linux工具的最常用用法,以便读者能以最快时间掌握,并在工作中应

【Linux 28个Unix/Linux工具】需要用到的时候可以看看

原文链接http://kkovacs.eu/cool-but-obscure-unix-tools 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具都非常不错,希望每个人都知道.本篇文章还在Hacker News上被讨论,你可以过去看看.我以作者的原文中加入了官网链接和一些说明. dstat & sar iostat, vmstat, ifstat 三合一的工具,用来查看系

Linux工具指南

Linux工具 Linux下还是有很多超棒的开发工具的. 在Linux日常使用中,最常用的命令自然是sudo, ls, cp, mv, cat等,但作为后台开发者,上述命令远远不够.从我的理解来看,合格的C/C++开发者至少需要从开发及调试工具.文件处理.性能分析.网络工具四个方面针对性使用一些开发工具.这里我罗列了一些,大部分都是开发中经常需要使用的命令,有些功能比较简单的命令我会给出一些基本用法,有些本身自带体系(比如vim, gdb等)的命令只能附上链接了. 开发及调试工具介绍了从"编辑

Linux工具[转]

ref: https://github.com/linw7/Skill-Tree/blob/master/Linux%E5%B7%A5%E5%85%B7.md Linux工具 Linux下还是有很多超棒的开发工具的. 在Linux日常使用中,最常用的命令自然是sudo, ls, cp, mv, cat等,但作为后台开发者,上述命令远远不够.从我的理解来看,合格的C/C++开发者至少需要从开发及调试工具.文件处理.性能分析.网络工具四个方面针对性使用一些开发工具.这里我罗列了一些,大部分都是开发中

linux 工具系列之 - strace

 what is strace ? Linux 解释 从字面意思上就可道 strace 跟踪程序执行时候的系统调用和信号. how use? man 一下strace 发现它的参数一大坨,是不是很郁闷,不用担心,其实我们只要记住几个常用的参数就可以搞定绝对大多数问题啦 注意 test指可执行文件 strace  -i 查看可执行文件的系统调用 -i  查看可执行文件在那个地址进行了系统调用,可配合gdb -p " pid of test" 附加到运行的进程 Ctrl  +c 结束 -o

【转载更新】Linux工具之AWK 3.高级知识

原文:http://blog.hexu.org/archives/41.shtml#id2874788 awk编程 14.1. 变量 在awk中,变量不需要定义就可以直接使用,变量类型可以是数字或字符串.赋值格式:Variable = expression,如$ awk ‘$1 ~/test/{count = $2 + $3; print count}’ test,上式的作用是,awk先扫描第一个域,一旦test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来.

20140617-Windows连接Linux工具介绍

20140617-Windows连接Linux工具介绍 1.正常情况下都不会直接在Linux服务端进行操作,实际使用服务器和工作电脑不会在同一个地方,也不允许在服务器操作. 我这里用SecureCRT 7.0来连接服务器.提供个下载,带注册机工具: 安装完后进行注册,以管理员身份运行KEY,点patch,第一次找到程序的安装目录,选择"SecureCRT.exe"[确定],然后会自动弹出程序的配置文件目录,选"SecureCRTHelp.exe"文件[确定],接下来