在我最近的文章用于 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 内存添加 2GB 内存解决了问题,并且进一步的 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 数据,包括单个 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
— 显示有关内存的非常详细的信息,包括诸如活动和非活动内存以及已分配和已使用的总虚拟内存等数据,这些数据并非总是由其他工具显示。iomem
和ioports
— 列出为各种 I/O 设备定义的内存范围和端口。
您将看到,尽管数据在这些文件中可用,但其中大部分没有任何注释。这意味着您需要做一些工作来识别和提取所需的数据。但是,已经讨论过的监控工具已经为他们设计用于显示的数据做到了这一点。
/proc 文件系统中还有更多数据,了解更多关于它的最佳方法是参考 proc(5) 手册页,其中包含有关在那里找到的各种文件的详细信息。
下次我将把所有这些整合在一起,并讨论我如何使用这些工具来解决问题。
3 条评论