sysstat (sar, iostat)

Table of Contents

1. sysstat (sar)

The sysstat utilities are a collection of performance monitoring tools for Linux. These include sar, sadf, mpstat, iostat, tapestat, pidstat, cifsiostat and sa tools.

sysstat 工具集中主要包含下面工具:

  • iostat 提供 CPU 使用率及硬盘吞吐效率的数据;
  • mpstat 提供单个处理器或多个处理器相关数据;
  • pidstat 收集进程运行时的 I/O,CPU 和内存使用情况;
  • sar 负责收集、报告并存储系统活跃的信息;
  • sa1 负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具 cron 来运行,是为 sadc 所设计的程序前端程序;
  • sa2 负责把每天的系统活跃性息写入总结性的报告中。它是为 sar 所设计的前端 ,要通过 cron 来调用;
  • sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作 sar 工具的后端;
  • sadf 显示被 sar 通过多种格式收集的数据。

其中,最重要的就是 sar (System Activity Reports),它是一个收集系统性能数据的强大工具。

参考:http://sebastien.godard.pagesperso-orange.fr/

1.1. 安装

Ubuntu 中可以这样安装:

$ apt-get install sysstat

1.2. 配置

安装完成后,无法立即运行 sar ,因为其配置文件禁止了其运行。打开配置文件 /etc/default/sysstat,把其中 ENABLED 值从 false 改为 true。然后启用相应服务,如执行 /etc/init.d/sysstat start

2. sar 使用实例

sar 的选项非常多,下面只列出常用的选项:

  • -A 所有报告的总和;
  • -u CPU 利用率(默认为查看 CPU 利用率,可省略);
  • -v 进程、I节点、文件和锁表状态;
  • -d 硬盘使用报告;
  • -r 没有使用的内存页面和硬盘块;
  • -g 串口 I/O 的情况;
  • -b 缓冲区使用情况;
  • -a 文件读写情况;
  • -c 系统调用情况;
  • -R 进程的活动情况;
  • -y 终端设备活动情况;
  • -w 系统交换活动。

sar 使用时,一般最后两个参数分别为:interval、count,分别表示采样间隔和采样次数。

例如,每 10 秒采样一次,连续采样 2 次,观察 CPU 的使用情况:

$ sar -u 10 2
Linux 2.6.32-100.28.5.el6.x86_64        01/07/2013      _x86_64  _       (8 CPU)

01:00:14 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:00:24 AM     all      0.28      0.00      0.54      1.07      0.03     98.07
01:00:34 AM     all      0.38      0.00      0.74      0.11      0.02     98.75
Average:        all      0.33      0.00      0.64      0.58      0.02     98.41

上面输出中:

  • %user:用户态 CPU 所占百分比(不统计 nice 值大于 0 的程序,这个数据在 %nice 中);
  • %nice:nice 值大于 0 的程序其用户态 CPU 所占百分比;
  • %system:内核态 CPU 所占百分比;
  • %iowait:I/O 等待占用 CPU 的百分比,如果这个值过高,可能是硬盘存在 I/O 瓶颈;
  • %steal:虚拟环境(如 Hypervisor)下,CPU 在各虚拟机之间共享,表示被其他的虚拟机占用的 CPU 时间;
  • %idle:空闲时间(它不包括等待 I/O 的时间)所占百分比。

注 1:nice 值的范围为 -20 至 19。把 nice 设置为正数时,表示降低其 CPU 优先级,这很绅士,很 nice;一些不太重要的后台程序可以把自己 nice 设置为 19。
注 2:如果仅查看实时的 CPU 信息,使用 top 命令也行,其输出的第三行就是 CPU 相关信息:

top - 17:16:53 up 178 days, 19:42,  1 user,  load average: 0.07, 0.16, 0.08
Tasks: 172 total,   1 running, 131 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  0.5 sy,  0.0 ni, 98.1 id,  0.1 wa,  0.0 hi,  0.1 si,  0.0 st
            ^           ^        ^        ^        ^       ^         ^        ^
            |           |        |        |        |       |         |        |
          %user      %system   %nice    %idle   %iowait    |         |      %steal
                                                        hardware   software
                                                        interrupt  interrupt

3. iostate 使用实例

使用 iostate -x (选项 -x 表示输出更多信息)可以查看磁盘的 I/O 情况,如:

$ iostat -x 3 10              # 每 3 秒采样一次,一共采样 10 次


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    2.68   32.66    0.00   64.15

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
vda              5.33     76.00     0.00   0.00    1.00    14.25    0.67     22.67     5.00  88.24    2.00    34.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   2.00
vdb           1875.00  86230.67    15.67   0.83    1.02    45.99    0.67     16.00     3.33  83.33    4.50    24.00    0.00      0.00     0.00   0.00    0.00     0.00    0.04  99.87
vdc              0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00

如果 %util 一列超过了 70(利用率超过 70%),一般认为出现了 I/O 瓶颈。上面例子中,vdb 的 %util 为 99.87,很可能这个磁盘上有大量的读写操作,出现了 I/O 瓶颈。使用 iotop 可以查看使用 I/O 最多的进程。

Author: cig01

Created: <2017-06-01 Thu>

Last updated: <2020-05-10 Sun>

Creator: Emacs 27.1 (Org mode 9.4)