信息是解决任何计算机问题的关键,包括与 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
此程序只是递增 1 并将 X 的当前值打印到 STDOUT。并且它会消耗 CPU 周期。运行 cpuHog 的终端会话应该在 top 中显示非常高的 CPU 使用率。观察这对 top 中的系统性能有何影响。CPU 使用率应立即大幅上升,负载平均值也应随时间开始增加。如果需要,您可以打开其他终端会话并在其中启动 cpuHog 程序,以便运行多个实例。
确定您要终止的 cpuHog 程序的 PID。按下 k 键并查看摘要部分底部 Swap 行下方的消息。Top 会询问您要终止的进程的 PID。输入该 PID 并按 Enter。现在 top 会询问信号编号并显示默认值 15。尝试此处描述的每个信号并观察结果。
4 个用于 Linux 系统监控的开源工具
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 时,hypervisor 为另一个虚拟处理器提供服务的 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 在图 2 中最右边两列的第二行显示当前 CPU 频率和缩放因子——这是我在这些监视器中的任何一个上都没有看到的。
进程部分
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 核心与所有 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 打开和关闭整个侧边栏。
可以使用 D 显示 Docker 统计信息。
配置
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 比其他监视器的影响更大,并且可以使用 10% 到 20% 的 CPU 时间。选择工具时,请务必考虑这一点。
我最初打算将 SAR(系统活动报告器)包含在本文中,但随着本文的篇幅越来越长,我也清楚地意识到 SAR 与这些监视工具显着不同,并且应该单独撰写一篇文章。考虑到这一点,我计划撰写一篇关于 SAR 和 /proc 文件系统的文章,以及第三篇关于如何使用所有这些工具来定位和解决问题的文章。
20 条评论