信息是解决任何计算机问题的关键,包括与 Linux 及其运行硬件相关的问题。即使并非默认安装所有工具,但大多数发行版都提供并包含许多工具。这些工具可用于获取大量信息。
本文讨论了一些交互式命令行界面 (CLI) 工具,这些工具随 Red Hat 相关发行版(包括 Red Hat Enterprise Linux、Fedora、CentOS 和其他衍生发行版)一起提供,或者可以轻松安装在这些发行版上。虽然有 GUI 工具可用,并且它们提供良好的信息,但 CLI 工具提供所有相同的信息,并且它们始终可用,因为许多服务器没有 GUI 界面,但所有 Linux 系统都有命令行界面。
本文重点介绍我通常使用的工具。如果我没有介绍您最喜欢的工具,请原谅我,并在评论区告诉我们您使用的工具以及原因。
我在 Linux 环境中进行问题诊断的首选工具几乎总是系统监控工具。对我来说,这些工具是 top、atop、htop 和 glances。
所有这些工具都监控 CPU 和内存使用情况,并且大多数工具至少列出有关正在运行的进程的信息。有些工具还监控 Linux 系统的其他方面。所有工具都提供系统活动的近乎实时的视图。
负载平均值
在继续讨论监控工具之前,务必更详细地讨论负载平均值。
负载平均值是衡量 CPU 使用率的重要标准,但当我说 1 分钟(或 5 分钟或 10 分钟)负载平均值为 4.04 时,这到底意味着什么?负载平均值可以被视为 CPU 需求的度量;它是一个数字,表示等待 CPU 时间的平均指令数。因此,这是 CPU 性能的真实度量,不同于标准的“CPU 百分比”,后者包括 CPU 实际上未工作的 I/O 等待时间。
例如,完全利用的单处理器系统 CPU 的负载平均值为 1。这意味着 CPU 完全跟上需求;换句话说,它具有完美的利用率。负载平均值小于 1 意味着 CPU 未被充分利用,负载平均值大于 1 意味着 CPU 被过度利用,并且存在积压的、未满足的需求。例如,单 CPU 系统中 1.5 的负载平均值表示三分之一的 CPU 指令被迫等待执行,直到前一个指令完成。
这对于多处理器也是如此。如果 4 CPU 系统的负载平均值为 4,则它具有完美的利用率。例如,如果它的负载平均值为 3.24,则它的三个处理器被完全利用,而一个处理器被利用约 76%。在上面的示例中,一个 4 CPU 系统的 1 分钟负载平均值为 4.04,这意味着 4 个 CPU 中没有剩余容量,并且一些指令被迫等待。一个完美利用的 4 CPU 系统将显示 4.00 的负载平均值,因此示例中的系统已完全加载,但未过载。
负载平均值的最佳条件是使其等于系统中 CPU 的总数。这将意味着每个 CPU 都被充分利用,但没有指令必须被迫等待。较长期的负载平均值提供了总体利用率趋势的指示。
Linux Journal 在 2006 年 12 月 1 日的期刊中发表了一篇优秀的文章,描述了负载平均值、其背后的理论和数学,以及如何解释它们。
信号
此处讨论的所有监视器都允许您向正在运行的进程发送信号。这些信号中的每一个都有特定的功能,尽管其中一些信号可以由接收程序使用信号处理程序定义。
单独的 kill 命令也可用于向监视器外部的进程发送信号。kill -l 可用于列出可以发送的所有可能的信号。其中三个信号可用于杀死进程。
- SIGTERM (15): 信号 15,SIGTERM 是按 k 键时 top 和其他监视器发送的默认信号。它也可能是最无效的信号,因为程序必须内置信号处理程序。程序的信号处理程序必须拦截传入的信号并采取相应的措施。因此,对于大多数没有信号处理程序的脚本,SIGTERM 会被忽略。SIGTERM 背后的想法是,通过简单地告诉程序您希望它自行终止,它将利用这一点并清理打开的文件等,然后以受控和友好的方式自行终止。
- SIGKILL (9): 信号 9,SIGKILL 提供了一种杀死即使是最顽固的程序(包括脚本和其他没有信号处理程序的程序)的方法。但是,对于没有信号处理程序的脚本和其他程序,它不仅会杀死正在运行的脚本,还会杀死脚本正在运行的 shell 会话;这可能不是您想要的行为。如果您想杀死一个进程并且不在乎是否友好,这就是您想要的信号。该信号不能被程序代码中的信号处理程序拦截。
- SIGINT (2): 信号 2,当 SIGTERM 不起作用并且您希望程序更友好地终止时,可以使用 SIGINT,例如,不杀死程序正在运行的 shell 会话。SIGINT 向程序正在运行的会话发送中断信号。这等效于使用 Ctrl-C 组合键终止正在运行的程序,特别是脚本。
为了进行实验,打开一个终端会话,在 /tmp 中创建一个名为 cpuHog 的文件,并使用权限 rwxr_xr_x 使其可执行。将以下内容添加到文件中。
#!/bin/bash # This little program is a cpu hog X=0;while [ 1 ];do echo $X;X=$((X+1));done
在不同的窗口中打开另一个终端会话,将它们相邻放置,以便您可以观察结果并在新会话中运行 top。使用以下命令运行 cpuHog 程序
/tmp/cpuHog
此程序只是简单地加一计数并将 X 的当前值打印到 STDOUT。它会占用 CPU 周期。运行 cpuHog 的终端会话应在 top 中显示非常高的 CPU 使用率。观察这对 top 中的系统性能的影响。CPU 使用率应立即大幅上升,负载平均值也应随着时间的推移开始增加。如果需要,您可以打开其他终端会话并在其中启动 cpuHog 程序,以便运行多个实例。
确定您要杀死的 cpuHog 程序的 PID。按 k 键并查看摘要部分底部交换行下方的消息。Top 要求您输入要杀死的进程的 PID。输入该 PID 并按 Enter。现在 top 要求输入信号编号,并显示默认值 15。尝试此处描述的每个信号并观察结果。
Linux 系统监控的 4 个开源工具
top
我在执行问题诊断时使用的第一个工具之一是 top。我喜欢它,因为它自古以来就存在,并且始终可用,而其他工具可能未安装。
top 程序是一个非常强大的实用程序,它提供有关正在运行的系统的丰富信息。这包括有关内存使用情况、CPU 负载以及正在运行的进程列表的数据,包括每个进程使用的 CPU 时间和内存量。Top 以近乎实时的速度显示系统信息,(默认情况下)每三秒更新一次。Top 允许使用秒的小数,但非常小的值会给系统带来很大的负载。它也是交互式的,可以修改要显示的数据列和排序的列。
下图 1 显示了 top 程序的示例输出。top 的输出分为两个部分,分别称为“摘要”部分(输出的顶部部分)和“进程”部分(输出的下部部分);为了保持一致性,我将在 top、atop、htop 和 glances 中使用此术语。
top 程序有许多有用的交互式命令,您可以使用这些命令来管理数据显示和操作单个进程。使用 h 命令查看各种交互式命令的简短帮助页面。务必按两次 h 以查看帮助的两个页面。使用 q 命令退出。
摘要部分
top 输出的摘要部分是系统状态的概述。第一行显示系统正常运行时间和 1 分钟、5 分钟和 15 分钟的负载平均值。在下面的示例中,负载平均值分别为 4.04、4.17 和 4.06。
第二行显示当前活动的进程数以及每个进程的状态。
接下来显示包含 CPU 统计信息的行。可以有一行组合系统中存在的所有 CPU 的统计信息,如下面的示例所示,或者每个 CPU 一行;在本例中,用于该示例的计算机是单个四核 CPU。按 1 键可在 CPU 使用率的合并显示和单个 CPU 的显示之间切换。这些行中的数据以可用 CPU 总时间的百分比形式显示。
下面描述了这些字段和其他 CPU 数据字段。
- us:用户空间 – 在用户空间(即不在内核中)中运行的应用程序和其他程序。
- sy:系统调用 – 内核级函数。这不包括内核本身占用的 CPU 时间,仅包括内核系统调用。
- ni:nice – 以正 nice 级别运行的进程。
- id:空闲 – 空闲时间,即任何正在运行的进程未使用的时间。
- wa:等待 – 花费在等待 I/O 发生时的 CPU 周期。这是浪费的 CPU 时间。
- hi:硬件中断 – 花费在处理硬件中断时的 CPU 周期。
- si:软件中断 – 花费在处理软件创建的中断(例如系统调用)时的 CPU 周期。
- st:窃取时间 – 虚拟 CPU 在等待真实 CPU 时,而虚拟机监控程序正在为另一个虚拟处理器提供服务时,CPU 周期的百分比。
摘要部分中的最后两行是内存使用情况。它们显示物理内存使用情况,包括 RAM 和交换空间。
图 1:top 命令显示完全利用的 4 核 CPU。
您可以使用 1 命令将 CPU 统计信息显示为单个全局数字(如上面的图 1 所示),或者按单个 CPU 显示。l 命令打开和关闭负载平均值。t 和 m 命令分别在摘要部分的进程/CPU 行和内存行之间循环切换,包括关闭、仅文本和几种类型的条形图格式。
进程部分
top 输出的进程部分是系统中正在运行的进程的列表——至少对于终端显示器上有空间的进程数而言是这样。下面描述了 top 显示的默认列。可以使用单个按键添加其他几列。有关详细信息,请参阅 top 手册页。
- PID – 进程 ID。
- USER – 进程所有者的用户名。
- PR – 进程的优先级。
- NI – 进程的 nice 值。
- VIRT – 分配给进程的虚拟内存总量。
- RES – 进程消耗的非交换物理内存的驻留大小(以 kb 为单位,除非另有说明)。
- SHR – 进程使用的共享内存量(以 kb 为单位)。
- S – 进程的状态。可以是 R(正在运行)、S(正在休眠)和 Z(僵尸)。不太常见的状态可以是 T(已跟踪或已停止)和 D(不可中断的休眠)。
- %CPU – 此进程在上次测量的时间段内使用的 CPU 周期或时间的百分比。
- %MEM – 进程使用的物理系统内存的百分比。
- TIME+ – 自进程启动以来,进程消耗的总 CPU 时间(精确到百分之一秒)。
- COMMAND – 这是用于启动进程的命令。
使用 Page Up 和 Page Down 键滚动浏览正在运行的进程列表。d 或 s 命令可以互换使用,可用于设置更新之间的延迟间隔。默认值为三秒,但我更喜欢一秒间隔。间隔粒度可以低至十分之一秒 (0.1),但这将消耗更多您尝试测量的 CPU 周期。
您可以使用 < 和 > 键将排序的列向左或向右排序。
k 命令用于杀死进程,r 命令用于重新调整其 nice 值。您必须知道要杀死或重新调整 nice 值的进程的进程 ID (PID),该信息显示在 top 显示的进程部分中。杀死进程时,top 首先询问 PID,然后询问用于杀死进程的信号编号。键入它们并在每个之后按 Enter 键。从信号 15、SIGTERM 开始,如果这不能杀死进程,则使用 9、SIGKILL。
配置
如果您更改了 top 显示,可以使用 W(大写)命令将更改写入配置文件 ~/.toprc(在您的主目录中)。
atop
我也喜欢 atop。当您需要更多关于 I/O 活动类型的信息时,这是一个出色的监视器。默认刷新间隔为 10 秒,但可以使用间隔 i 命令将其更改为您尝试执行的操作所需的任何值。atop 无法像 top 那样以亚秒级间隔刷新。
使用 h 命令显示帮助。务必注意有多个帮助页面,您可以使用空格键向下滚动以查看其余部分。
atop 的一个不错的特性是它可以将原始性能数据保存到文件中,然后在以后播放以进行仔细检查。这对于追踪间歇性问题非常方便,尤其是在您无法直接监控系统期间发生的问题。atopsar 程序用于播放保存文件中的数据。
.
图 2:atop 系统监视器除了 CPU 和进程数据外,还提供有关磁盘和网络活动的信息。
摘要部分
atop 包含与 top 大致相同的信息,但也显示有关网络、原始磁盘和逻辑卷活动的信息。上面的图 2 显示了显示顶部列中的这些附加数据。请注意,如果您的水平屏幕空间足够宽,则将显示其他列。相反,如果您的水平宽度较小,则显示的列数较少。我也喜欢 atop 显示当前 CPU 频率和缩放因子——我在这些监视器中的任何其他监视器上都没有看到过——在图 2 中最右边两列的第二行。
进程部分
atop 进程显示包括与 top 相同的某些列,但它还包括每个进程的磁盘 I/O 信息和线程计数,以及每个进程的虚拟和实际内存增长统计信息。与摘要部分一样,如果有足够的水平屏幕空间,将显示其他列。例如,在图 2 中,显示了进程所有者的 RUID(实际用户 ID)。展开显示还将显示 EUID(有效用户 ID),这在程序以 SUID(设置用户 ID)运行时可能很重要。
atop 还可以提供有关每个进程的磁盘、内存、网络和计划信息的详细信息。只需分别按 d、m、n 或 s 键即可查看该数据。g 键将显示返回到通用进程显示。
可以使用 C 按 CPU 使用率排序、M 按内存使用率排序、D 按磁盘使用率排序、N 按网络使用率排序和 A 进行自动排序,轻松完成排序。自动排序通常按最繁忙的资源对进程进行排序。只有在安装并加载 netatop 内核模块后,才能对网络使用率进行排序。
您可以使用 k 键杀死进程,但没有重新调整进程 nice 值的选项。
默认情况下,在给定的时间间隔内没有活动的网络和磁盘设备不会显示。这可能会导致对主机硬件配置的错误假设。f 命令可用于强制 atop 显示空闲资源。
配置
atop 手册页引用了全局和用户级别的配置文件,但在我自己的 Fedora 或 CentOS 安装中找不到任何配置文件。也没有命令来保存修改后的配置,并且程序终止时不会自动保存。因此,似乎没有办法使配置更改永久生效。
htop
htop 程序很像 top,但功能更强大。它看起来很像 top,但它也提供了一些 top 不具备的功能。但是,与 atop 不同,它不提供任何类型的磁盘、网络或 I/O 信息。
图 3:htop 具有漂亮的条形图来指示资源使用情况,并且可以显示进程树。
摘要部分
htop 的摘要部分以两列显示。它非常灵活,可以使用几种不同类型的信息以几乎任何您喜欢的顺序进行配置。虽然 top 和 atop 的 CPU 使用率部分可以在组合显示和显示每个 CPU 的条形图之间切换,但 htop 不能。因此,它具有许多不同的 CPU 显示选项,包括单个组合条、每个 CPU 的条以及可以将特定 CPU 分组到单个条中的各种组合。
我认为这是一个比其他一些系统监视器更简洁的摘要显示,并且更容易阅读。此摘要部分的缺点是 htop 中缺少其他监视器中可用的一些信息,例如按用户、空闲和系统时间划分的 CPU 百分比。
F2(设置)键用于配置 htop 的摘要部分。显示可用数据显示的列表,您可以使用功能键将它们添加到左列或右列,并在所选列中上下移动它们。
进程部分
htop 的进程部分与 top 的非常相似。与其他监视器一样,进程可以按多个因素排序,包括 CPU 或内存使用率、用户或 PID。请注意,选择树视图时无法排序。
F6 键允许您选择排序的列;它显示可用于排序的列列表,您可以选择所需的列并按 Enter 键。
您可以使用向上和向下箭头键选择一个进程。要杀死进程,请使用向上和向下箭头键选择目标进程,然后按 k 键。将显示要发送给进程的信号列表,并选择 15、SIGTERM。您可以指定要使用的信号(如果与 SIGTERM 不同)。您也可以使用 F7 和 F8 键重新调整所选进程的 nice 值。
我特别喜欢的一个命令是 F5,它以树状格式显示正在运行的进程,从而可以轻松确定正在运行的进程的父/子关系。
配置
每个用户都有自己的配置文件 ~/.config/htop/htoprc,并且对 htop 配置的更改会自动存储在那里。htop 没有全局配置文件。
glances
我最近才了解到 glances,它可以显示比我目前熟悉的任何其他监视器更多的关于您的计算机的信息。这包括磁盘和网络 I/O、可以显示 CPU 和其他硬件温度以及风扇转速的热读数,以及按硬件设备和逻辑卷划分的磁盘使用情况。
拥有所有这些信息的缺点是 glances 本身会使用大量的 CPU 资源。在我的系统上,我发现它可能会占用大约 10% 到 18% 的 CPU 周期。这很多,因此您在选择监视器时应考虑这种影响。
摘要部分
glances 的摘要部分包含与其他监视器的摘要部分大致相同的信息。如果您有足够的水平屏幕空间,它可以同时显示 CPU 使用率的条形图和数字指示器,否则它将仅显示数字。
图 4:glances 界面,包含网络、磁盘、文件系统和传感器信息。
我更喜欢此摘要部分而不是其他监视器的摘要部分;我认为它以易于理解的格式提供了正确的信息。与 atop 和 htop 一样,您可以按 1 键在显示单个 CPU 核心或将所有 CPU 核心作为单个平均值的全局显示之间切换,如上面的图 4 所示。
进程部分
进程部分显示有关每个正在运行的进程的标准信息。进程可以自动 a 排序,或按 CPU c、内存 m、名称 p、用户 u、I/O 速率 i 或时间 t 排序。自动排序时,进程首先按使用最多的资源排序。
Glances 还在屏幕底部显示警告和严重警报,包括事件的时间和持续时间。当您尝试诊断问题但无法长时间盯着屏幕时,这可能很有帮助。可以使用 l 命令打开或关闭这些警报日志,可以使用 w 命令清除警告,而可以使用 x 清除所有警报和警告。
有趣的是,glances 是这些监视器中唯一一个不能用于杀死或重新调整进程 nice 值的监视器。它仅用作监视器。您可以使用外部 kill 和 renice 命令来操作进程。
侧边栏
Glances 有一个非常好的侧边栏,可以显示 top 或 htop 中不可用的信息。Atop 确实显示了其中一些数据,但 glances 是唯一显示传感器数据的监视器。有时,查看计算机内部的温度会很好。可以使用 d、f、n 和 s 命令分别打开和关闭各个模块(磁盘、文件系统、网络和传感器)。可以使用 2 打开和关闭整个侧边栏。
Docker 统计信息可以使用 D 显示。
配置
Glances 不需要配置文件即可正常工作。如果您选择拥有配置文件,则系统范围的配置文件实例将位于 /etc/glances/glances.conf 中。个人用户可以在 ~/.config/glances/glances.conf 中拥有本地实例,这将覆盖全局配置。这些配置文件的主要目的是设置警告和严重警报的阈值。我找不到任何方法来使其他配置更改(例如侧边栏模块或 CPU 显示)永久生效。似乎每次启动 glances 时都必须重新配置这些项目。
有一个文档 /usr/share/doc/glances/glances-doc.html 提供了大量关于使用 glances 的信息,并且明确指出您可以使用配置文件来配置要显示的模块。但是,给出的信息和示例都没有描述如何做到这一点。
结论
请务必阅读每个监视器的手册页,因为其中包含大量关于配置和与它们交互的信息。另请使用交互模式下的 h 键获取帮助。此帮助可以为您提供有关选择和排序数据列、设置更新间隔等信息。
当您寻找问题的原因时,这些程序可以告诉您很多信息。它们可以告诉您进程(以及哪个进程)正在占用 CPU 时间、是否有足够的可用内存、进程是否在等待 I/O(例如磁盘或网络访问完成)时停顿等等。
我强烈建议您花时间观察这些监视程序在正常运行的系统上运行时的情况,这样您就可以区分那些在您寻找问题原因时可能异常的事物。
您还应该意识到,使用这些监视工具的行为会改变系统对资源(包括内存和 CPU 时间)的使用。top 和大多数这些监视器可能占用系统 CPU 时间的 2% 或 3%。glances 比其他监视器的影响更大,并且可能占用 CPU 时间的 10% 到 20%。在选择工具时,请务必考虑这一点。
我最初打算将 SAR(系统活动报告器)包含在这篇文章中,但随着这篇文章变得越来越长,我也清楚地意识到 SAR 与这些监视工具明显不同,应该单独撰写一篇文章。因此,考虑到这一点,我计划撰写一篇关于 SAR 和 /proc 文件系统的文章,以及第三篇关于如何使用所有这些工具来定位和解决问题的文章。
20 条评论