使用 sar 和 /proc 文件系统进行系统统计

还没有读者喜欢这个。
System statistics with sar and the /proc filesystem

ajmexico。Jason Baker 修改。CC BY-SA 2.0。

在我最近的文章 用于 Linux 系统监控的 4 个开源工具 中,我讨论了可以帮助解决系统问题的交互式工具。我还提到了 sar 命令以及它与交互式命令的不同之处。sar 命令是我在解决问题时最喜欢的命令之一。它对于那些在人们不注意时似乎出现的问题尤其有用。

而且,当您真的想深入了解原始数据时,/proc 文件系统拥有您所需的一切。

使用 SAR

SAR 代表系统活动报告器(System Activity Reporter)。它的主要功能是收集每天的系统性能数据,并将其存储在日志文件中以供以后显示。数据以 10 分钟的平均值收集,但也可以配置更精细的收集。数据保留一个月。

安装和配置

SAR 作为 sysstat 软件包的一部分安装在基于 Red Hat 的发行版中。(查看您的发行版的手册页以获取安装详细信息。)

dnf -y install sysstat

在将 sar 作为 sysstat 软件包的一部分安装后,通常无需进行任何操作来更改其配置。数据在每小时的每 10 分钟标记处收集。请注意,sar 命令的输出可能非常宽——太宽而无法在本文中使用。因此,如果您刚刚安装了 sysstat 软件包,您应该等待 30 分钟左右,以便收集可以用于本文其余部分的数据。但是,如果您想更改数据收集的时间,则必须配置 cron 或 systemd 配置文件。

在 Fedora 20 之前,sar 数据收集和每日摘要处理由 /etc/cron.d 中的 sysstat cron 作业控制。从 Fedora 2X 开始,sar 不再使用 cron 作业来控制其收集和每日摘要活动,systemd 已接管这些职责。如果您需要进行任何更改,请检查 /usr/lib/systemd/system 目录中的 sysstat 服务、摘要和收集文件。这些文件很小且不言自明。

我唯一一次更改 sar 配置是在我需要每分钟而不是每 10 分钟收集数据,以便更好地掌握特定问题发生的准确时间。sar 数据存储在 /var/log/sa 目录中每天两个文件中。以高于每 10 分钟的频率收集数据可能会导致这些文件变得非常大。

在我工作过的一个地方,我们遇到了一个问题,这个问题开始并迅速升级,以至于默认的 10 分钟间隔对于确定哪个先发生没有帮助:CPU 负载、高磁盘活动或其他。使用 1 分钟的间隔,我们确定不仅 CPU 活动很高,而且在它之前还有一段短暂的高网络活动以及高磁盘活动。最终,我们确定这是一个对 Web 服务器的意外拒绝服务 (DOS) 攻击,情况变得复杂的原因是计算机中安装的 RAM 太少,无法处理临时过载。向现有 2GB RAM 添加 2GB RAM 解决了问题,并且进一步的 DOS 攻击没有引起问题。

检查收集的数据

sar 命令的输出可以是详细的,或者您可以选择限制显示的数据。例如,输入不带选项的 sar 命令,它只显示聚合 CPU 性能数据。sar 命令默认使用当天,从午夜开始,因此您应该只看到今天的 CPU 数据。

另一方面,使用 sar -A 命令显示今天收集的所有数据。现在输入 sar -A | less 命令并翻页浏览输出,以查看 SAR 收集的许多类型的数据,包括磁盘和网络使用情况、CPU 上下文切换(CPU 每秒从一个程序切换到另一个程序的次数)、页面交换、内存和交换空间使用情况等等。使用 sar 命令的手册页来解释结果,并了解可用的许多选项。许多这些选项允许您查看特定数据,例如网络和磁盘性能。

我通常使用 sar -A 命令,因为许多可用数据类型是相互关联的,有时我在输出的某个部分中找到一些线索,这些线索可以为我提供性能问题的线索,否则我可能不会查看该部分。-A 选项显示所有收集的数据类型。

查看 sar -A | less 命令的整个输出,以了解显示的数据类型和数量。务必查看 CPU 使用率数据以及每秒启动的进程数 (proc/s) 和每秒上下文切换数 (cswch/s)。如果上下文切换次数迅速增加,则可能表明正在运行的进程非常频繁地从 CPU 上换出。

您可以使用 sar -u 命令将数据总量限制为总 CPU 活动。尝试一下,并注意您只获得复合 CPU 数据,而不是单个 CPU 的数据。也尝试 -r 选项用于内存,以及 -S 用于交换空间。也可以组合这些选项,以下命令将显示 CPU、内存和交换空间

sar -urS

使用 -p 选项显示硬盘驱动器的块设备名称,而不是更神秘的设备标识符,而 -d 仅显示块设备——硬盘驱动器。发出以下命令以使用在 /dev 目录中找到的名称以可读格式查看所有块设备数据

sar -dp | less

如果您只想要特定时间之间的数据,可以使用 -s-e 分别定义开始时间和结束时间。以下命令显示今天上午 7:50 到上午 8:11 之间所有 CPU 数据,包括个人和聚合数据

sar -P ALL -s 07:50:00 -e 08:11:00

请注意,所有时间都必须采用 24 小时格式。如果您有多个 CPU,则每个 CPU 都会单独详细说明,并且还会给出所有 CPU 的平均值。

下一个命令使用 -n 选项显示所有接口的网络统计信息

sar -n ALL | less

以前几天的数据

也可以通过指定所需的日志文件来检查以前几天收集的数据。假设今天的日期是 9 月 3 日,您想查看昨天 9 月 2 日的数据,以下命令显示 9 月 2 日收集的所有数据。每个文件的最后两位数字是数据收集的月份的日期

sar -A -f /var/log/sa/sa02 | less

您可以使用以下命令,其中 DD 是昨天的月份的日期

sar -A -f /var/log/sa/saDD | less

实时数据

您还可以使用 SAR 显示(几乎)实时数据。以下命令以 5 秒的间隔显示内存使用情况,持续 10 次迭代

sar -r 5 10

对于 sar 来说,这是一个有趣的选项,因为它可以为定义的时段提供一系列数据点,可以详细检查和比较这些数据点。/proc 文件系统 SAR 和我之前的文章中介绍的系统监控工具的所有这些数据都必须来自某个地方。幸运的是,所有这些内核数据都可以在 /proc 文件系统中轻松获得。事实上,由于存储在那里的内核性能数据都是 ASCII 文本格式,因此可以使用简单的命令(如 cat)显示,这样各个程序就不必加载自己的内核模块来收集它。这节省了系统资源,并使数据更准确。SAR 和我在之前的文章中讨论的系统监控工具都从 /proc 文件系统收集数据。

请注意,/proc 是一个虚拟文件系统,仅在 Linux 运行时存在于 RAM 中。它不存储在硬盘驱动器上。

即使我不会详细介绍,/proc 文件系统还包含实时内核调整参数和变量。因此,您只需更改 /proc 中相应的内核调整变量即可更改内核调整;无需重启。

切换到 /proc 目录并列出那里的文件。您将看到,除了数据文件外,还有大量编号的目录。这些目录中的每一个都代表一个进程,其中目录名称是进程 ID (PID)。您可以深入研究这些目录,以查找有关您可能感兴趣的单个进程的信息。

要查看此数据,只需 cat 以下一些文件

  • cmdline — 显示内核命令行,包括传递给它的所有参数。
  • cpuinfo — 显示有关 CPU 的信息,包括标志、型号名称步进和缓存大小。
  • meminfo — 显示有关内存的非常详细的信息,包括诸如活动和非活动内存以及已分配和已使用的总虚拟内存等数据,这些数据并非总是由其他工具显示。
  • iomemioports — 列出为各种 I/O 设备定义的内存范围和端口。

您将看到,虽然数据在这些文件中可用,但其中大部分没有任何注释。这意味着您需要做一些工作来识别和提取所需的数据。但是,已经讨论过的监控工具已经为他们设计显示的数据执行了此操作。

在 /proc 文件系统中还有更多数据,了解更多关于它的最佳方法是参考 proc(5) 手册页,其中包含有关在那里找到的各种文件的详细信息。

下次我将把所有这些结合在一起,并讨论我如何使用这些工具来解决问题。

David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件方面的工作,自 1969 年以来一直从事计算机方面的工作。他是“系统管理员的 Linux 哲学”的坚定支持者和传播者。

3 条评论

感谢 David 这篇有趣的文章。我以前从没听说过 'sar'。总有东西要学。

“用于 Linux 系统监控的 4 个开源工具”的链接

不正确/已损坏。

感谢您指出这一点。现在已修复。

回复 作者:链接已损坏 (未验证)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.