sar 工具

sar 命令是 Linux 下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。

sar 工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。

命令用法

$ sar [ options ] [ <interval> [ <count> ] ]

vmstat 以及 iostat 类似,interval 代表状态信息刷新的时间间隔, count 代表显示报告的次数。

常用可选参数

  • -A —— 等同于指定 -bBdqrRSuvwWy -I SUM -I XALL -n ALL -u ALL -P ALL

  • -b —— 显示 I/O 以及传输速率的统计信息。其取值如下所示:

    • tps 每秒发送给物理设备的总的传输量(指发送给物理设备的 I/O 请求)。多个逻辑请求会合并为单独的一个 I/O 请求,因此,传输量的大小是不确定的。

    • rtps 每秒发送给物理设备的总的读取请求。

    • wtps 每秒发送给物理设备的总的写入请求。

    • bread/s 每秒钟以块形式从设备读取的数据的多少。在 2.4 以上版本的内核钟,这个块大小等于扇区大小,因此为 512 字节。在以前的版本,这个大小是不确定的。

    • bwrtn/s 每秒钟以块形式往设备写入的数据的多少。

  • -B —— 报告页统计信息。以下的一些值只有在 2.5 内核版本前才可用:

    • pgpgin/s 每秒从磁盘中置换出来的页的大小,以千字节的形式显示(2.2 版本前这个值表示块数量)

    • pgpgout/s 每秒写入磁盘的页的大小,以千字节的形式显示(2.2 版本前这个值表示块数量)

    • fault/s 每秒由系统产生的 page fault (包括 minor 和 major)的数量

    • majflt/s 每秒由系统产生的 major page fault 的数量,这些都是需要从磁盘中加载一份内存页的。

    • pgfree/s 每秒钟系统释放的内存页的数目

    • pgscank/s 每秒由 kwsapd 守护进程扫描到的内存页数目

    • pgscand/s 每秒直接扫描的内存页的数目

    • pgsteal/s 每秒系统根据内存开销需要从缓存中取回的内存页的数目

    • %vmeff 计算 pgsteal/pgscan ,得到页置换效率的矩阵图。

  • -C —— 当从文件中读取数据时,告诉 sar 来展示通过 sadc 插入的注释

  • -d —— 报告每个块设备的活动信息(只在 2.4 版本以上内核可用)

  • -e [ hh:mm:ss ] —— 设置报告的结束时间。默认的结束时间是 18:00:00 。小时必须以 24 小时制的形式。这个选项可以用在读写文件中(使用 -f-o

  • -f [filename]filename 中提取记录,默认值是当前日志数据文件 /var/log/sa/sadd 文件。和 -o 不可以同时使用。

  • -i interval —— 在尽可能接近 interval 时间间隔里获取数据记录。

  • -n { keyword [,...] | ALL } 报告网络统计信息。可选的 keyword 为 DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 以及 UDP6.

  • -o [ filename ] —— 以二进制格式保存 reading 到文件中。每个 reading 都是单独的记录。filename 的默认值是 /var/log/sa/sadd 文件。

  • -P { cpu [,...] | ALL } —— 报告指定的处理器或所有处理器的统计信息。注意 processor 0 是第一个处理器

  • q 报告队列长度以及平均负载信息。显示以下结果:

    • runq-sz 运行队列长度(等待运行的任务的数目)

    • plist-sz 任务列表中任务数量

    • ldavg-l 上一分钟系统的平均负载

    • ldavg-5 最近 5 分钟的系统平均负载

    • ldavg-15 最近 15 分钟的系统平均负载

  • -r 报告内存的使用率的统计信息,显示以下结果:

    • kbmemfree 可用的空闲内存大小(千字节)

    • kbmemused 已使用内存大小(不包括内核本身使用)(千字节)

    • %memused 已使用内存百分比

    • kbbuffers 内核用来作为缓冲区的内存大小(千字节)

    • kbcached 内核用来缓存数据的内存大小(千字节)

    • %commit 当前工作载荷所需要的内存百分比(通常会超过 100%)

  • -R —— 报告内存统计信息,显示以下结果:

    • frmpg/s 系统每秒释放的内存页数目,负值代表系统需要分配的页数目。一个页通常是 4KB 或 8KB(视机器架构而定)

    • bufpg/s 系统每秒需要用作缓冲区的额外内存页数目。

    • campg/s 系统每秒用作缓存的额外内存页数目

  • -s[ hh:mm:ss ] —— 设置数据的起始时间,因为 sar 工具会从这个指定的时间点开始被触发并提取数据,默认是 08:00:00 。小时必须以 24 小时制的形式。这个选项可以用在读写文件中(使用 -f-o

  • -S 报告 swap 空间的使用率统计情况

    • kbswpfree 空闲 swap 空间大小(千字节)

    • kbswpused 已用 swap 空间大小(千字节)

    • %swpused 已用 swap 空间百分比

    • kbswpcad 缓存的 swap 内存的数目(千字节)

    • %swpcad 缓存的 swap 内存占医用 swap 空间的百分比

  • -u [ ALL ] —— 报告 CPU 的使用情况。

  • -v 报告 inode 、 file 以及其他内核表的状况

  • -w 报告任务创建以及系统切换的活动信息

  • -W 报告交换区的统计信息

  • -y 报告 TTY (终端)设备的活动信息

使用示例

  1. 每 2 秒统计 CPU 的使用情况,显示 5 行:

     $ sar -u 2 5
  2. 显示内存和网络的统计信息并保存到日志文件 sal6 中:

     $ sar -r -n DEV -f /var/log/sa/sal6
  3. 显示当前日志文件中保存的全部统计信息:

     $ sar -A

已知 BUG

  • sar 只有在 /proc 文件系统以被挂载的情况下才能使用。

  • 不是所有的统计信息都可用,取决于所使用的内核版本

使用文件

  • /var/log/sa/sadd 默认的日志数据文件,dd 表示的是这个月的第几天

  • /proc 包含多个不同的系统统计文件

Last updated