信息是解决任何计算机问题的关键,包括与 Linux 及其运行硬件相关的问题。即使并非所有工具都默认安装,但大多数发行版都提供并包含许多工具。这些工具可用于获取大量信息。
本文讨论了 Red Hat 相关发行版(包括 Red Hat Enterprise Linux、Fedora、CentOS 和其他衍生发行版)提供或易于安装的一些交互式命令行界面 (CLI) 工具。虽然有可用的 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 键并查看摘要部分底部 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 的 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 打开或关闭整个侧边栏。
可以使用 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 条评论