系统管理员的工具箱:sar
作为一名从事系统管理员工作多年的从业者,我很容易想当然地认为我长期使用的工具每个人都听说过。当然,每天都有新的系统管理员进入这个领域,即使是经验丰富的系统管理员也不都使用相同的工具。考虑到这一点,我决定撰写几篇专栏文章,重点介绍一些常见但容易被忽视的工具,这些工具可以使系统管理员(实际上是任何 Linux 用户)的生活更轻松。我将以一个经典的故障排除工具开始这个系列:sar。
有句老话说:“山中无老虎,猴子称大王。” 这对服务器来说也是如此。服务器似乎总是在您未登录时(通常是在您深度睡眠时)才出现问题。日志可以在很大程度上帮助您隔离过去机器上发生的问题,但如果问题是由于高负载引起的,日志通常不能说明全部情况。在我 2010 年 3 月的专栏文章“Linux 故障排除,第一部分:高负载”(https://linuxjournal.cn/article/10688)中,我讨论了如何使用诸如 uptime 和 top 之类的工具来排除高负载系统的故障。这些工具非常棒,只要系统在您登录时仍然处于高负载状态,但是如果系统在您午休或睡觉时处于高负载状态,您就需要某种方法来从过去提取 top 给您的相同统计信息。这就是 sar 的用武之地。
启用 sar 日志记录sar 是一个经典的 Linux 工具,它是 sysstat 软件包的一部分,应该可以在几乎所有主要发行版中使用您常用的软件包管理器获得。安装后,它将在基于 Red Hat 的系统上启用,但在基于 Debian 的系统(如 Ubuntu)上,您可能需要编辑 /etc/default/sysstat,并确保 ENABLED
设置为 true。在基于 Red Hat 的系统上,sar 默认记录七天的统计信息。如果您想记录更多天数,您可以编辑 /etc/sysconfig/sysstat 并更改 HISTORY
选项。
一旦 sysstat 配置并启用,它将每十分钟收集一次有关您系统的统计信息,并通过 /etc/cron.d/sysstat 中的 cron 作业将其存储在 /var/log/sysstat 或 /var/log/sa 下的日志文件中。还有一个每日 cron 作业会在午夜之前运行,并轮换当天的统计信息。默认情况下,日志文件将以当月的当前日期进行时间戳标记,因此日志将自动轮换并覆盖一个月前的日志。
CPU 统计信息在您的系统收集了一些统计信息后,您可以使用 sar 工具来检索它们。当不带其他参数运行时,sar 会显示当天的 CPU 统计信息
$ sar
. . .
07:05:01 PM CPU %user %nice %system %iowait %steal %idle
. . .
08:45:01 PM all 4.62 0.00 1.82 0.44 0.00 93.12
08:55:01 PM all 3.80 0.00 1.74 0.47 0.00 93.99
09:05:01 PM all 5.85 0.00 2.01 0.66 0.00 91.48
09:15:01 PM all 3.64 0.00 1.75 0.35 0.00 94.26
Average: all 7.82 0.00 1.82 1.14 0.00 89.21
如果您熟悉命令行工具 top,那么上面的 CPU 统计信息应该看起来很熟悉,因为它们与您从 top 实时获得的统计信息相同。您可以像使用 top 一样使用这些统计信息,只是在这种情况下,您能够查看系统过去的状态,以及统计信息底部的总体平均值,以便您可以了解什么是正常的。因为我之前用整整一篇文章专门讨论了如何使用这些统计信息来排除高负载故障,所以我在这里不再赘述所有内容,但本质上,sar 为您提供了所有相同的统计信息,只是以过去十分钟的间隔提供。
RAM 统计信息sar 还支持大量不同的选项,您可以使用这些选项来提取其他统计信息。例如,使用 -r
选项,您可以查看 RAM 统计信息
$ sar -r
. . .
07:05:01 PM kbmemfree kbmemused %memused kbbuffers kbcached
kbcommit %commit
. . .
08:45:01 PM 881280 2652840 75.06 355284 1028636
8336664 183.87
08:55:01 PM 881412 2652708 75.06 355872 1029024
8337908 183.89
09:05:01 PM 879164 2654956 75.12 356480 1029428
8337040 183.87
09:15:01 PM 886724 2647396 74.91 356960 1029592
8332344 183.77
Average: 851787 2682333 75.90 338612 1081838
8341742 183.98
与 CPU 统计信息一样,在这里我可以查看过去的 RAM 统计信息,类似于我在 top 中可以找到的。
磁盘统计信息在我的负载故障排除专栏中,我引用 sysstat 作为一个很棒的磁盘 I/O 故障排除工具 iostat 的来源。尽管 iostat 提供了实时的磁盘 I/O 统计信息,但您也可以将 -b
选项传递给 sar,以从过去获取磁盘 I/O 数据
$ sar -b
. . .
07:05:01 PM tps rtps wtps bread/s bwrtn/s
. . .
08:45:01 PM 2.03 0.33 1.70 9.90 31.30
08:55:01 PM 1.93 0.03 1.90 1.04 31.95
09:05:01 PM 2.71 0.02 2.69 0.69 48.67
09:15:01 PM 1.52 0.02 1.50 0.20 27.08
Average: 5.92 3.42 2.50 77.41 49.97
我认为这些列需要一些解释
-
tps
:每秒事务数。 -
rtps
:每秒读取事务数。 -
wtps
:每秒写入事务数。 -
bread/s
:每秒读取的块数。 -
bwrtn/s
:每秒写入的块数。
sar 可以返回比我提到的更多的其他统计信息,但如果您想查看它提供的所有信息,只需传递 -A
选项,它将返回当天所有统计信息的完整转储(或者只是浏览其手册页)。
因此,默认情况下,sar 返回当天的统计信息,但通常您会想要获取过去几天的信息。如果您想通过将今天的数字与过去几天的数字进行比较来查看今天的数字是否正常,或者如果您要排除周末行为异常的服务器的故障,这将特别有用。例如,假设您今天注意到服务器在下午 5 点到 5 点 30 分之间出现问题。首先,使用 -s
和 -e
选项告诉 sar 仅显示您指定的开始 (-s
) 和结束 (-e
) 时间之间的数据
$ sar -s 17:00:00 -e 17:30:00
Linux 2.6.32-29-server (www.example.net) 02/06/2012 _x86_64_
(2 CPU)
05:05:01 PM CPU %user %nice %system %iowait %steal %idle
05:15:01 PM all 4.39 0.00 1.83 0.39 0.00 93.39
05:25:01 PM all 5.76 0.00 2.23 0.41 0.00 91.60
Average: all 5.08 0.00 2.03 0.40 0.00 92.50
要将该数据与不同日期的同一时间段进行比较,只需使用 -f
选项并将 sar 指向 /var/log/sysstat 或 /var/log/sa 下与该日期对应的日志文件之一。例如,要从本月初提取统计信息
$ sar -s 17:00:00 -e 17:30:00 -f /var/log/sysstat/sa01
Linux 2.6.32-29-server (www.example.net) 02/01/2012 _x86_64_
(2 CPU)
05:05:01 PM CPU %user %nice %system %iowait %steal %idle
05:15:01 PM all 9.85 0.00 3.95 0.56 0.00 85.64
05:25:01 PM all 5.32 0.00 1.81 0.44 0.00 92.43
Average: all 7.59 0.00 2.88 0.50 0.00 89.04
您还可以在从过去的日志文件中提取数据时添加所有正常的 sar 选项,因此您可以运行相同的命令并添加 -r
参数以获取 RAM 统计信息
$ sar -s 17:00:00 -e 17:30:00 -f /var/log/sysstat/sa01 -r
Linux 2.6.32-29-server (www.example.net) 02/01/2012 _x86_64_
(2 CPU)
05:05:01 PM kbmemfree kbmemused %memused kbbuffers kbcached
kbcommit %commit
05:15:01 PM 766452 2767668 78.31 361964 1117696
8343936 184.03
05:25:01 PM 813744 2720376 76.97 362524 1118808
8329568 183.71
Average: 790098 2744022 77.64 362244 1118252
8336752 183.87
如您所见,sar 是一个相对简单但非常实用的故障排除工具。虽然存在许多其他程序可以从您的服务器中提取趋势数据并将其绘制成图表(我自己也使用它们),但 sar 的优点在于它不需要网络连接,因此如果您的服务器负载过重以至于不再通过网络响应,您仍然有可能使用 sar 获得有价值的故障排除数据。
工具箱图像 通过 Shutterstock.com。