系统管理员有许多工具来查看和管理正在运行的进程。对我来说,这些主要是 topatophtop。几年前,我发现了Glances,这是一个显示信息的工具,我的其他收藏夹都没有。所有这些工具都监视 CPU 和内存使用情况,其中大多数都列出了有关正在运行的进程的信息(至少)。但是,Glances 还监视文件系统 I/O、网络 I/O 和传感器读数,这些读数可以显示 CPU 和其他硬件温度以及风扇速度和硬件设备和逻辑卷的磁盘使用情况。

一览

我在文章4 Linux系统监控开源工具中提到了Glances,但在本文中我会更深入地研究它。如果您阅读我之前的文章,可能对其中的一些信息很熟悉,但您也应该在这里找到一些新的东西。

Glances 是跨平台的,因为它是用 Python 编写的。它可以安装在 Windows 和其他安装了当前版本的 Python 的主机上。大多数 Linux 发行版(在我的例子中是 Fedora)的存储库中都有 Glances。如果没有,或者您使用的是不同的操作系统(例如 Windows),或者您只想从源代码中获取它,您可以在Glances 的 GitHub 存储库中找到下载和安装它的说明。

我建议您在尝试本文中的命令时在测试机器上运行 Glances。如果您没有可用于测试的物理主机,您可以在虚拟机 (VM) 上探索 Glances,但您不会看到硬件传感器部分;毕竟,VM 没有真正的硬件。

要在 Linux 主机上启动 Glances,请打开终端会话并输入命令 glances

Glances 包含三个主要部分——摘要、流程和警报——以及一个侧边栏。我现在将探索它们和其他使用 Glances 的细节。

总结部分

在它的前几行中,Glances 的摘要部分包含与您在其他监视器的摘要部分中可以找到的大部分相同的信息。如果终端中有足够的水平空间,Glances 可以通过条形图和数字指示器显示 CPU 使用率;否则它将只显示数字。

我更喜欢 Glances 的摘要部分,而不是其他监视器中的部分(如 top);我认为它以易于理解的格式提供了正确的信息。

扫视显示

图片来源:

Glances 显示在繁忙的 Linux 主机上。为了清楚起见,并非所有可能的显示都显示在左侧边栏中。

上面的摘要部分提供了系统状态的概述。第一行显示主机名、Linux 发行版、内核版本和系统正常运行时间。

接下来的四行显示 CPU、内存使用、交换和负载统计信息。左列显示正在使用的 CPU、内存和交换空间的百分比。它还显示系统中存在的所有 CPU 的组合统计信息。

1 键可在综合 CPU 使用率显示和单个 CPU 显示之间切换。下图显示了带有各个 CPU 统计信息的 Glances 显示。

扫视显示

图片来源:

显示单个 CPU 统计信息的概览。

此视图包括一些额外的 CPU 统计信息。在任何一种显示模式下,CPU 使用率字段的描述都可以帮助您解释 CPU 部分中显示的数据。请注意,CPU 从 0(零)开始编号。

中央处理器

这是当前 CPU 使用率占可用总量的百分比。

用户

这些是在用户空间中运行的应用程序和其他程序,即不在内核中。

系统

这些是内核级函数。它不包括内核本身占用的 CPU 时间,仅包括内核系统调用。

闲置的

这是空闲时间,即没有被任何正在运行的进程使用的时间。

好的

这是以积极、良好的水平运行的进程所使用的时间。

中断

这些是占用 CPU 时间的中断请求。

等待

这些是等待 I/O 发生所花费的 CPU 周期——这是浪费的 CPU 时间。

当管理程序为另一个虚拟处理器提供服务时,虚拟 CPU 等待真实 CPU 的 CPU 周期百分比。

ctx-sw

这些是每秒上下文切换的数量;它表示每秒 CPU 从运行一个进程切换到另一个进程的次数。

国际米兰

这是每秒的硬件中断数。当硬件设备(如硬盘驱动器)告诉 CPU 它已完成数据传输或网络接口卡准备好接受更多数据时,就会发生硬件中断。

sw_int

软件中断告诉 CPU 某个请求的任务已经完成,或者软件已准备好执行某些操作。这些往往在内核级软件中更为常见。

关于漂亮的数字

漂亮的数字是管理员用来影响进程优先级的机制。不能直接改变进程的优先级,但是改变 nice 号可以修改内核调度器的优先级设置算法的结果。好的数字从 -20 到 +19,数字越大越好。默认 nice 数为 0,默认优先级为 20。将 nice 数设置为大于零会稍微增加优先级数,从而使进程更好,从而减少 CPU 周期的贪婪。将 nice 数字设置为更负的数字会导致较低的优先级数字,从而使进程不太友好。可以使用 renice 命令或在 top、atop 和 htop 中更改漂亮的数字。

内存

摘要部分的内存部分包含有关内存使用情况的统计信息。

记忆

这将内存使用量显示为可用总量的百分比。

全部的

这是主机中安装的 RAM 内存总量,减去分配给显示适配器的任何数量。

用过的

这是系统和应用程序使用的内存总量,但不包括缓存或缓冲区。

自由的

这是可用内存的数量。

积极的

这是活跃使用的内存量——如果需要,不活跃的内存会被交换到磁盘。

无效

这是正在使用但一段时间未访问的内存。

缓冲区

这是用于缓冲空间的内存;它通常用于通信和 I/O,例如网络。数据被接收和存储,直到软件可以检索它以供使用,或者可以将其发送到存储设备或传输到网络。

缓存

这是用于存储数据以进行磁盘传输的内存,直到它可以被程序使用或存储到磁盘。

如果您对交换空间及其工作原理有所了解,则交换部分是不言自明的。这显示了可用的总交换空间、使用了多少以及剩余多少。

摘要部分的负载部分显示一分钟、五分钟和 15 分钟的平均负载。

您可以使用数字键 1345 来改变您对本节数据的看法。 2 键打开和关闭左侧边栏。

关于平均负载的更多信息

平均负载通常被误解,尽管它们是衡量 CPU 使用率的关键标准。但是,例如,当我说一分钟(或五分钟或 10 分钟)的平均负载为 4.04 时,它的真正含义是什么?平均负载可以被认为是对 CPU 需求的衡量;它是一个数字,表示等待 CPU 时间的平均指令数,因此它是衡量 CPU 性能的真实指标。

更多关于系统管理员

  • 启用系统管理员博客

  • 自动化企业:自动化 IT 管理指南

  • 电子书:系统管理员的 Ansible 自动化

  • 现场故事:IT 自动化系统管理员指南

  • 电子书:面向 SRE 和系统管理员的 Kubernetes 指南

  • 最新系统管理员文章

例如,一个充分利用的单处理器系统 CPU 的平均负载为 1。这意味着 CPU 正好跟上需求;换句话说,它具有完美的利用。小于 1 的平均负载意味着 CPU 未充分利用,而大于 1 的平均负载意味着 CPU 过度使用并且存在被压抑的、未满足的需求。例如,单 CPU 系统中的平均负载为 1.5 表示三分之一的 CPU 指令必须等待执行,直到前一条指令完成。

对于多处理器也是如此。如果四 CPU 系统的平均负载为 4,则它具有完美的利用率。例如,如果它的平均负载为 3.24,则它的三个处理器被充分利用,一个处理器的利用率约为 24%。在上面的例子中,一个四 CPU 系统的一分钟平均负载为 4.04,这意味着四个 CPU 之间没有剩余容量,并且有几条指令被迫等待。一个完美利用的四 CPU 系统将显示 4.00 的平均负载,这意味着系统已满载但未超载。

最佳平均负载条件是平均负载等于系统中 CPU 的总数。这意味着每个 CPU 都被充分利用,并且不必强制等待任何指令。但现实是混乱的,很少能满足最佳条件。如果主机以 100% 的利用率运行,这将不允许 CPU 负载需求出现峰值。

长期负载平均值表明总体利用率趋势。

Linux Journal 在 2006 年 12 月 1 日的期刊中发表了一篇关于平均负载](https://archive.org/details/Linux-Journal-2006-12/page/n81)的优秀文章(https://archive.org/details/Linux-Journal-2006-12/page/n81)、理论、数学原理以及如何解释它们。不幸的是,Linux Journal 已经停止出版,它的档案不再直接可用,所以链接是第三方档案。

查找 CPU 占用

使用 Glances 等工具的原因之一是查找占用过多 CPU 时间的进程。打开一个新的终端会话(与运行 Glances 的不同),然后输入并启动以下占用 CPU 的 Bash 程序。

X=0;while [ 1 ];do echo $X;X=$((X+1));done

这个程序是一个 CPU hog 并且会用完每个可用的 CPU 周期。在您完成本文并试验 Glances 时让它运行。它将让您了解占用 CPU 周期的程序是什么样的。请务必观察一段时间内对负载平均值的影响,以及此过程的 TIME+ 列中的累积时间。

工艺部分

Process 部分显示有关正在运行的每个进程的标准信息。根据查看模式和终端屏幕的大小,将针对正在运行的进程显示不同的信息列。具有足够宽终端的默认模式显示下面列出的列。如果调整终端屏幕的大小,显示的列会自动更改。通常从左到右为每个进程显示以下列。

中央处理器%

这是 CPU 时间占单个内核的百分比。例如,98% 代表单核可用 CPU 周期的 98%。多个进程可以显示高达 100% 的 CPU 使用率。

记忆%

这是进程使用的 RAM 内存量占主机中总虚拟内存的百分比。

虚拟

这是进程使用的人类可读格式的虚拟内存量,例如 12M 对应 12 兆字节。

回复

这是指进程使用的物理(常驻)内存量。同样,这是人类可读的格式,带有 KMG 指示符,以指定千字节、兆字节或千兆字节。

PID

每个进程都有一个标识号,称为 PID。这个数字可以用在命令中,例如 renicekill,来管理进程。请记住,kill 实用程序可以向除“kill”信号之外的另一个进程发送信号。

用户

这是拥有该进程的用户的名称。

时间+

这表示进程自启动以来累积的 CPU 时间量。

THR

这是当前为此进程运行的线程总数。

这是过程的好数字。

S

这是当前状态;当进程在调试跟踪期间停止时,它可以是 (R)unning、(S)leeping、(I)dle、Tt , 或 (Z)ombie。僵尸进程是一个已经被杀死但还没有完全死亡的进程,所以它会继续消耗一些系统资源,比如RAM。

R/s 和 W/s

这些是每秒磁盘读取和写入。

命令

这是用于启动进程的命令。

Glances 通常会自动确定默认的排序列。进程可以自动排序 (a),或按 CPU (c)、内存 (m)、名称 (p)、用户 (u) 、I/O 速率 (i) 或时间 (t)。进程按最常用的资源自动排序。在上图中,突出显示了 TIME+ 列。

警报部分

Glances 还在屏幕底部显示警告和严重警报,包括事件的时间和持续时间。当您尝试诊断问题并且无法一次盯着屏幕数小时时,这会很有帮助。这些警报日志可以用 l(小写 L)键打开或关闭,警告可以用 w 键清除,而警报和警告都可以用 x 清除

侧边栏

Glances 在左侧有一个非常漂亮的侧边栏,用于显示 tophtop 中不可用的信息。虽然 atop 显示其中一些数据,但 Glances 是唯一显示传感器数据的监视器。毕竟,有时很高兴看到计算机内部的温度。

可以分别使用 dfns 键打开和关闭各个模块、磁盘、文件系统、网络和传感器。可以使用 2 切换整个侧边栏。 Docker 统计信息可以使用 D 显示在侧边栏中。

请注意,当 Glances 在虚拟机上运行时,不会显示硬件传感器。

获得帮助

您可以通过按 h 键获得帮助;再次按 h 关闭帮助页面。帮助页面相当简洁,但它确实显示了可用的交互选项以及如何打开和关闭它们。手册页简要说明了启动 Glances 时可以使用的选项。

您可以按 qEsc 退出 Glances。

配置

Glances 不需要配置文件即可正常工作。如果您选择拥有一个,配置文件的系统范围实例将位于 /etc/glances/glances.conf 中。个人用户可以在 ~/.config/glances/glances.conf 拥有一个本地实例,这将覆盖全局配置。这些配置文件的主要目的是设置警告和严重警报的阈值。您还可以指定是否默认显示某些模块。

文件 /usr/local/share/doc/glances/README.rst 包含额外的有用信息,包括您可以安装以支持某些可选 Glances 功能的可选 Python 模块。

命令行选项

Glances 提供了命令行选项,允许它以特定的查看模式启动。例如,命令 glances -2 在禁用左侧边栏的情况下启动程序。

遥控器等

通过在服务器模式下启动它,您可以使用 Glances 监控远程主机:

[root@testvm1 ~]# glances -s

然后,您可以使用以下命令从客户端连接到服务器:

[root@testvm2 ~]# glances -c @testvm1

Glances 可以显示 Glances 服务器列表及其活动摘要。它还具有 Web 界面,因此您可以从浏览器监控远程 Glances 服务器。最新版本的 Glances 还可以显示 Docker 统计信息。

还有用于 Glances 的可插拔模块,可提供基本程序中不可用的测量数据。

限制

尽管 Glances 可以监控主机的许多方面,但它无法管理进程。它不能像 tophtop 那样改变进程的好数字,也不能杀死一个进程。 Glances 不是交互式工具。它严格用于监控。 killrenice 等外部工具可用于管理进程。

Glances 只能显示在可用空间中占用大部分指定资源(例如 CPU 时间)的进程。如果有空间仅列出 10 个进程,那么您将只能看到这些。 Glances 不提供滚动或反向排序选项,使您能够查看除前 X 进程之外的任何其他进程。

测量的影响

观察者效应 是一种物理学理论,它指出,“仅仅观察一种情况或现象必然会改变这种现象。”在测量 Linux 系统性能时也是如此。

仅仅使用监控工具会改变系统对资源的使用,包括内存和 CPU 时间。 top 实用程序和大多数其他监视器可能使用系统 CPU 时间的 2% 到 3%。 Glances 实用程序比其他实用程序具有更大的影响;它通常使用 10% 到 20% 的 CPU 时间,而且我已经看到它在具有 32 个 CPU 的非常大且活跃的系统中使用多达 40% 的 CPU。这是很多,所以当您考虑使用 Glances 作为您的监视器时,请考虑它的影响。

我个人的看法是,当您需要 Glances 的功能时,这是一个很小的代价。

总结

尽管它缺乏交互能力,例如 renicekill 进程的能力,以及它的高 CPU 负载,我发现 Glances 是一个非常有用的工具。完整的Glances 文档可在 Internet 上找到,Glances 手册页包含启动选项和交互式命令信息。


本文的部分内容基于 David Both 的新书 使用和管理 Linux:第 2 卷 - 从零到系统管理员:高级主题.

Logo

更多推荐