Linux 性能监控 Sar (Sysstat) 示例

举报
Tiamo_T 发表于 2022/04/08 19:07:30 2022/04/08
【摘要】 使用 sar,您可以实时监控各种 Linux 子系统(CPU、内存、I/O..)的性能,还可以持续收集所有性能数据、存储它们并进行历史分析以识别瓶颈。

使用 sar,您可以实时监控各种 Linux 子系统(CPU、内存、I/O..)的性能,还可以持续收集所有性能数据、存储它们并进行历史分析以识别瓶颈。

Sar 是 sysstat 包的一部分。

本文解释了如何安装和配置 sysstat 包(其中包含 sar 实用程序),并解释了如何使用 sar 监控以下 Linux 性能统计信息。

  1. 集体 CPU 使用率
  2. 单个 CPU 统计信息
  3. 已使用和可用的内存
  4. 已使用和可用的交换空间
  5. 系统的整体 I/O 活动
  6. 单个设备 I/O 活动
  7. 上下文切换统计
  8. 运行队列并加载平均数据
  9. 网络统计
  10. 报告特定时间的sar数据

这是 sar 实用程序所需的唯一指南。因此,请将此添加为书签以供您将来参考。

一、安装配置Sysstat

安装 Sysstat 包

首先,确保您的系统上有最新版本的 sar。根据您的发行版,使用以下任何一种方法安装它。

sudo apt-get install sysstat
(or)
yum install sysstat
(or)
rpm -ivh sysstat-10.0.0-1.i586.rpm

从源安装 Sysstat

从sysstat 下载页面下载最新版本。

您也可以使用 wget 下载


wget http://pagesperso-orange.fr/sebastien.godard/sysstat-10.0.0.tar.bz2

tar xvfj sysstat-10.0.0.tar.bz2

cd sysstat-10.0.0

./configure --enable-install-cron

注意:确保传递选项 –enable-install-cron。这会自动为您执行以下操作。如果您不使用此选项配置 sysstat,则必须自己手动完成这项丑陋的工作。

  • 创建 /etc/rc.d/init.d/sysstat
  • 创建从 /etc/rc.d/rc*.d/ 目录到 /etc/rc.d/init.d/sysstat 的适当链接,以在 Linux 引导过程中自动启动 sysstat。
  • 例如,/etc/rc.d/rc3.d/S01sysstat 会自动链接到 /etc/rc.d/init.d/sysstat

在 ./configure 之后,如下图所示进行安装。

make

make install

注意:这将在 /usr/local/bin 下安装 sar 和其他 sysstat 实用程序

安装后,使用“sar -V”验证 sar 版本。版本 10 是 sysstat 的当前稳定版本。

$ sar -V
sysstat version 10.0.0
(C) Sebastien Godard (sysstat  orange.fr)

最后,确保 sar 有效。例如,下面给出系统 CPU 统计 3 次(间隔 1 秒)。

$ sar 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

01:27:32 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
01:27:33 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
01:27:34 PM       all      0.25      0.00      0.25      0.00      0.00     99.50
01:27:35 PM       all      0.75      0.00      0.25      0.00      0.00     99.00
Average:          all      0.33      0.00      0.17      0.00      0.00     99.50

Sysstat 的实用程序部分

以下是其他 sysstat 实用程序。

  • sar收集并显示所有系统活动统计信息。
  • sadc代表“系统活动数据收集器”。这是进行数据收集的 sar 后端工具。
  • sa1将系统活动存储在二进制数据文件中。为此目的,sa1 依赖于 sadc。sa1 从 cron 运行。
  • sa2创建收集的统计信息的每日摘要。sa2 从 cron 运行。
  • sadf可以生成 CSV、XML 和各种其他格式的 sar 报告。使用它来将 sar 数据与其他工具集成。
  • iostat生成 CPU、I/O 统计信息
  • mpstat显示 CPU 统计信息。
  • pidstat根据进程 ID (PID) 报告统计信息
  • nfsiostat显示 NFS I/O 统计信息。
  • cifsiostat生成 CIFS 统计信息。

本文重点介绍 sysstat 基础知识和 sar 实用程序。

使用 cron 作业 - sa1 和 sa2 收集 sar 统计信息

在 /etc/cron.d 目录下创建 sysstat 文件,该文件将收集历史 sar 数据。

# vi /etc/cron.d/sysstat
*/10 * * * * root /usr/local/lib/sa/sa1 1 1
53 23 * * * root /usr/local/lib/sa/sa2 -A

如果您从源代码安装了 sysstat,则 sa1 和 sa2 的默认位置是 /usr/local/lib/sa。如果您使用发行版更新方法(例如:yum、up2date 或 apt-get)进行安装,则可能是 /usr/lib/sa/sa1 和 /usr/lib/sa/sa2。

注意:要了解 cron 条目,请阅读Linux Crontab: 15 Awesome Cron Job Examples

/usr/local/lib/sa/sa1

  • 这每 10 分钟运行一次,并收集 sar 数据以供历史参考。
  • 如果要每 5 分钟收集一次 sar 统计信息,请将上述 /etc/cron.d/sysstat 文件中的 */10 更改为 */5。
  • 这会将数据写入 /var/log/sa/saXX 文件。XX 是一个月中的某一天。saXX 文件是一个二进制文件。您无法通过在文本编辑器中打开它来查看其内容。
  • 例如,如果今天是该月的第 26 天,sa1 将 sar 数据写入 /var/log/sa/sa26
  • 您可以将两个参数传递给 sa1:间隔(以秒为单位)和计数。
  • 在上面的 crontab 示例中:sa1 1 1 表示 sa1 以 1 秒的间隔(每 10 分钟)收集 sar 数据 1 次。

/usr/local/lib/sa/sa2

  • 这将在接近午夜(23:53)运行,以创建 sar 数据的每日摘要报告。
  • sa2 创建 /var/log/sa/sarXX 文件(请注意,这与 sa1 创建的 saXX 文件不同)。sa2 创建的这个 sarXX 文件是一个 ascii 文件,您可以在文本编辑器中查看它。
  • 这也将删除超过一周的 saXX 文件。因此,编写一个每周运行的快速 shell 脚本,将 /var/log/sa/* 文件复制到其他目录以进行历史 sar 数据分析。

二、10 个实用的 Sar 用法示例

有两种调用 sar 的方法。

  1. sar 后跟一个选项(不指定 saXX 数据文件)。这将查找当天的 saXX 数据文件并报告在当天该点之前记录的性能数据。
  2. sar 后跟一个选项,并使用 -f 选项另外指定一个 saXX 数据文件。这将报告该特定日期的性能数据。即 XX 是一个月中的哪一天。

在下面的所有示例中,我们将解释如何查看当天的某些性能数据。要查找特定日期,请在 sar 命令末尾添加“-f /var/log/sa/saXX”。

所有 sar 命令将在其输出中的第一行包含以下内容。

$ sar -u
Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU)
  • Linux 2.6.18-194.el5PAE – 系统的 Linux 内核版本。
  • (dev-db) – 收集 sar 数据的主机名。
  • 2011 年 3 月 26 日 – 收集 sar 数据的日期。
  • _i686_ – 系统架构
  • (8 CPU) – 此系统上可用的 CPU 数量。在多核系统上,这表示内核总数。

1.所有CPU的CPU使用率(sar -u)

这给出了所有 CPU 的累积实时 CPU 使用率。“1 3”每1秒报告3次。您很可能会关注最后一个字段“%idle”来查看 CPU 负载。

$ sar -u 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

01:27:32 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
01:27:33 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
01:27:34 PM       all      0.25      0.00      0.25      0.00      0.00     99.50
01:27:35 PM       all      0.75      0.00      0.25      0.00      0.00     99.00
Average:          all      0.33      0.00      0.17      0.00      0.00     99.50

以下是一些变化:

  • sar -u显示当天收集到的 CPU 使用率。
  • sar -u 1 3每 1 秒显示一次实时 CPU 使用情况,共 3 次。
  • sar -u ALL与“sar -u”相同,但显示附加字段。
  • sar -u ALL 1 3与“sar -u 1 3”相同,但显示附加字段。
  • sar -u -f /var/log/sa/sa10显示 sa10 文件中每月 10 天的 CPU 使用率。

2.单个CPU或Core的CPU使用率(sar -P)

如果您的机器上有 4 个核心,并且想查看各个核心在做什么,请执行以下操作。

“-P ALL”表示它应该显示所有单个核心的统计信息。

在以下示例中,“CPU”列下的 0、1、2 和 3 表示相应的 CPU 内核编号。

$ sar -P ALL 1 1
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

01:34:12 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
01:34:13 PM       all     11.69      0.00      4.71      0.69      0.00     82.90
01:34:13 PM         0     35.00      0.00      6.00      0.00      0.00     59.00
01:34:13 PM         1     22.00      0.00      5.00      0.00      0.00     73.00
01:34:13 PM         2      3.00      0.00      1.00      0.00      0.00     96.00
01:34:13 PM         3      0.00      0.00      0.00      0.00      0.00    100.00

“-P 1”表示它应该只显示第二个核心的统计信息。(请注意,核心编号从 0 开始)。

$ sar -P 1 1 1
Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU)

01:36:25 PM CPU %user %nice %system %iowait %steal %idle
01:36:26 PM 1 8.08 0.00 2.02 1.01 0.00 88.89

以下是一些变化:

  • sar -P ALL显示当天按所有核心细分的 CPU 使用率。
  • sar -P ALL 1 3每 1 秒显示所有内核的实时 CPU 使用率,共 3 次(按所有内核细分)。
  • sar -P 1显示当天 1 号核心的 CPU 使用率。
  • sar -P 1 1 3显示 1 号核心的实时 CPU 使用率,每 1 秒显示 3 次。
  • sar -P ALL -f /var/log/sa/sa10显示 sa10 文件中每月 10 天的所有核心细分的 CPU 使用率。

3. 可用和已用内存 (sar -r)

这会报告内存统计信息。“1 3”每1秒报告3次。您很可能会关注“kbmemfree”和“kbmemused”的空闲和已用内存。

$ sar -r 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

07:28:06 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact
07:28:07 AM   6209248   2097432     25.25    189024   1796544    141372      0.85   1921060     88204
07:28:08 AM   6209248   2097432     25.25    189024   1796544    141372      0.85   1921060     88204
07:28:09 AM   6209248   2097432     25.25    189024   1796544    141372      0.85   1921060     88204
Average:      6209248   2097432     25.25    189024   1796544    141372      0.85   1921060     88204

以下是一些变化:

  • sar -r
  • sar -r 1 3
  • sar -r -f /var/log/sa/sa10

4. 使用的交换空间 (sar -S)

这会报告交换统计信息。“1 3”每1秒报告3次。如果“kbswpused”和“%swpused”为 0,那么您的系统没有交换。

$ sar -S 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

07:31:06 AM kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
07:31:07 AM   8385920         0      0.00         0      0.00
07:31:08 AM   8385920         0      0.00         0      0.00
07:31:09 AM   8385920         0      0.00         0      0.00
Average:      8385920         0      0.00         0      0.00

以下是一些变化:

  • sar-S
  • sar -S 1 3
  • sar -S -f /var/log/sa/sa10

笔记:

  • 使用“sar -R”来确定系统每秒释放、使用和缓存的内存页数。
  • 使用“sar -H”标识已使用和可用的大页面(以 KB 为单位)。
  • 使用“sar -B”生成分页统计信息。即每秒从磁盘调入(和调出)的 KB 数。
  • 使用“sar -W”生成页面交换统计信息。即每秒换入(换出)页面。

5. 总体 I/O 活动 (sar -b)

这会报告 I/O 统计信息。“1 3”每1秒报告3次。

以下字段显示在下面的示例中。

  • tps – 每秒事务数(包括读取和写入)
  • rtps – 每秒读取事务
  • wtps – 每秒写入事务
  • bread/s– 每秒读取的字节数
  • bwrtn/s – 每秒写入的字节数
$ sar -b 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

01:56:28 PM       tps      rtps      wtps   bread/s   bwrtn/s
01:56:29 PM    346.00    264.00     82.00   2208.00    768.00
01:56:30 PM    100.00     36.00     64.00    304.00    816.00
01:56:31 PM    282.83     32.32    250.51    258.59   2537.37
Average:       242.81    111.04    131.77    925.75   1369.90

以下是一些变化:

  • sar -b
  • sar -b 1 3
  • sar -b -f /var/log/sa/sa10

注意:使用“sar -v”显示系统使用的 inode 处理程序、文件处理程序和伪终端的数量。

6. 单个块设备 I/O 活动 (sar -d)

要识别各个块设备(即特定的挂载点、LUN 或分区)的活动,请使用“sar -d”

$ sar -d 1 1
Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU)

01:59:45 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
01:59:46 PM dev8-0 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10
01:59:46 PM dev8-1 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10
01:59:46 PM dev120-64 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62
01:59:46 PM dev120-65 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62
01:59:46 PM dev120-0 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30
01:59:46 PM dev120-1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30
01:59:46 PM dev120-96 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91
01:59:46 PM dev120-97 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91

在上面的示例中,“DEV”表示特定的块设备。

例如:“dev53-1”表示块设备,主设备号为 53,次设备号为 1。

设备名称(DEV 列)可以显示实际的设备名称(例如:sda、sda1、sdb1 等),如果使用 -p 选项(漂亮打印)如下图所示。

$ sar -p -d 1 1
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

01:59:45 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
01:59:46 PM       sda      1.01      0.00      0.00      0.00      0.00      4.00      1.00      0.10
01:59:46 PM      sda1      1.01      0.00      0.00      0.00      0.00      4.00      1.00      0.10
01:59:46 PM      sdb1      3.03     64.65      0.00     21.33      0.03      9.33      5.33      1.62
01:59:46 PM      sdc1      3.03     64.65      0.00     21.33      0.03      9.33      5.33      1.62
01:59:46 PM      sde1      8.08      0.00    105.05     13.00      0.00      0.38      0.38      0.30
01:59:46 PM      sdf1      8.08      0.00    105.05     13.00      0.00      0.38      0.38      0.30
01:59:46 PM      sda2      1.01      8.08      0.00      8.00      0.01      9.00      9.00      0.91
01:59:46 PM      sdb2      1.01      8.08      0.00      8.00      0.01      9.00      9.00      0.91

以下是一些变化:

  • sar -d
  • sar -d 1 3
  • sar -d -f /var/log/sa/sa10
  • sar -p -d

7.每秒显示上下文切换(sar -w)

这会报告每秒创建的进程总数和每秒上下文切换的总数。“1 3”每1秒报告3次。

$ sar -w 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

08:32:24 AM    proc/s   cswch/s
08:32:25 AM      3.00     53.00
08:32:26 AM      4.00     61.39
08:32:27 AM      2.00     57.00

以下是一些变化:

  • sar -w
  • sar -w 1 3
  • sar -w -f /var/log/sa/sa10

8. 报告运行队列和平均负载(sar -q)

这将报告最后 1 分钟、5 分钟和 15 分钟的运行队列大小和平均负载。“1 3”每1秒报告3次。

$ sar -q 1 3
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

06:28:53 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
06:28:54 AM         0       230      2.00      3.00      5.00         0
06:28:55 AM         2       210      2.01      3.15      5.15         0
06:28:56 AM         2       230      2.12      3.12      5.12         0
Average:            3       230      3.12      3.12      5.12         0

注意: “阻塞”列显示当前阻塞并等待 I/O 操作完成的任务数。

以下是一些变化:

  • sar -q
  • sar -q 1 3
  • sar -q -f /var/log/sa/sa10

9. 报告网络统计信息(sar -n)

这会报告各种网络统计信息。例如:通过网卡接收(发送)的数据包数量,数据包失败的统计信息等。“1 3”每1秒报告3次。

sar -n KEYWORD

KEYWORD 可以是以下之一:

  • DEV – 显示 eth0、eth1 等的网络设备重要统计信息,
  • EDEV - 显示网络设备故障统计
  • NFS – 显示 NFS 客户端活动
  • NFSD – 显示 NFS 服务器活动
  • SOCK – 显示用于 IPv4 的套接字
  • IP – 显示 IPv4 网络流量
  • EIP – 显示 IPv4 网络错误
  • ICMP – 显示 ICMPv4 网络流量
  • EICMP – 显示 ICMPv4 网络错误
  • TCP – 显示 TCPv4 网络流量
  • ETCP – 显示 TCPv4 网络错误
  • UDP – 显示 UDPv4 网络流量
  • SOCK6、IP6、EIP6、ICMP6、UDP6 用于 IPv6
  • ALL – 显示以上所有信息。输出会很长。
$ sar -n DEV 1 1
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

01:11:13 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
01:11:14 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:11:14 PM      eth0    342.57    342.57  93923.76 141773.27      0.00      0.00      0.00
01:11:14 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

使用 sar,您可以实时监控各种 Linux 子系统(CPU、内存、I/O..)的性能,还可以持续收集所有性能数据、存储它们并进行历史分析以识别瓶颈。

10. 使用开始时间报告 Sar 数据 (sar -s)

当您使用“sar -f”选项查看 /var/log/sa/saXX 文件中的历史 sar 数据时,它会显示该特定日期从当天凌晨 12:00 开始的所有 sar 数据。

使用“-s hh:mi:ss”选项,可以指定开始时间。例如,如果您指定“sar -s 10:00:00”,它将显示从上午 10 点开始(而不是从午夜开始)的 sar 数据,如下所示。

您可以将 -s 选项与其他 sar 选项结合使用。

例如,要从上午 10 点开始报告本月 26 日的平均负载,请组合 -q 和 -s 选项,如下所示。

$ sar -q -f /var/log/sa/sa23 -s 10:00:01
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

10:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
10:10:01 AM         0       127      2.00      3.00      5.00         0
10:20:01 AM         0       127      2.00      3.00      5.00         0
...
11:20:01 AM         0       127      5.00      3.00      3.00         0
12:00:01 PM         0       127      4.00      2.00      1.00         0

没有限制结束时间的选项。您只需要发挥创意并使用 head 命令,如下所示。

例如,从上午 10 点开始,如果要查看 7 个条目,则必须将上述输出通过管道传输到“head -n 10”。

$ sar -q -f /var/log/sa/sa23 -s 10:00:01 | head -n 10
Linux 2.6.18-194.el5PAE (dev-db)        03/26/2011      _i686_  (8 CPU)

10:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
10:10:01 AM         0       127      2.00      3.00      5.00         0
10:20:01 AM         0       127      2.00      3.00      5.00         0
10:30:01 AM         0       127      3.00      5.00      2.00         0
10:40:01 AM         0       127      4.00      2.00      1.00         2
10:50:01 AM         0       127      3.00      5.00      5.00         0
11:00:01 AM         0       127      2.00      1.00      6.00         0
11:10:01 AM         0       127      1.00      3.00      7.00         2
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。