系统管理员有许多工具可以查看和管理正在运行的进程。对我来说,以前主要使用 top、atop 和 htop。几年前,我发现了 Glances,这款工具可以显示我其他常用工具都无法显示的信息。所有这些工具都监控 CPU 和内存使用情况,并且大多数工具都列出有关正在运行的进程的信息(至少)。然而,Glances 还监控文件系统 I/O、网络 I/O 和传感器读数,这些读数可以显示 CPU 和其他硬件温度,以及风扇速度以及硬件设备和逻辑卷的磁盘使用情况。
Glances
我在文章 用于 Linux 系统监控的 4 款开源工具 中提到了 Glances,但本文将更深入地探讨它。如果您读过我之前的文章,那么其中一些信息可能很熟悉,但您也应该在这里找到一些新的内容。
Glances 是跨平台的,因为它使用 Python 编写。它可以安装在安装了当前 Python 版本的 Windows 和其他主机上。大多数 Linux 发行版(我的情况是 Fedora)的存储库中都包含 Glances。如果不是,或者您正在使用不同的操作系统(例如 Windows),或者您只是想从源头获取它,您可以在 Glances 的 GitHub 仓库 中找到下载和安装说明。
我建议您在测试机器上运行 Glances,同时尝试本文中的命令。如果您没有可用于测试的物理主机,您可以在虚拟机 (VM) 上探索 Glances,但您看不到硬件传感器部分;毕竟,VM 没有真正的硬件。
要在 Linux 主机上启动 Glances,请打开终端会话并输入命令 glances。
Glances 有三个主要部分——摘要、进程和警报——以及一个侧边栏。我现在将探讨它们以及使用 Glances 的其他详细信息。
摘要部分
在其顶部几行中,Glances 的摘要部分包含与您在其他监控工具的摘要部分中找到的大部分相同的信息。如果您的终端中有足够的水平空间,Glances 可以使用条形图和数字指示器显示 CPU 使用率;否则,它将仅显示数字。
我比其他监控工具(如 top)更喜欢 Glances 的摘要部分;我认为它以易于理解的格式提供了正确的信息。

繁忙的 Linux 主机上的 Glances 显示。为了清晰起见,左侧边栏中未显示所有可能的显示。
上面的摘要部分提供了系统状态的概述。第一行显示主机名、Linux 发行版、内核版本和系统正常运行时间。
接下来的四行显示 CPU、内存使用率、交换和负载统计信息。左列显示正在使用的 CPU、内存和交换空间百分比。它还显示系统中所有 CPU 的组合统计信息。
按 1 键可在合并的 CPU 使用率显示和各个 CPU 的显示之间切换。下图显示了具有各个 CPU 统计信息的 Glances 显示。

Glances 显示各个 CPU 统计信息。
此视图包含一些额外的 CPU 统计信息。在任一显示模式下,CPU 使用率字段的描述都可以帮助您解释 CPU 部分中显示的数据。请注意,CPU 编号从 0(零)开始。
CPU | 这是当前 CPU 使用率,以可用总量的百分比表示。 |
用户 | 这些是在用户空间(即不在内核中)中运行的应用程序和其他程序。 |
系统 | 这些是内核级函数。它不包括内核本身占用的 CPU 时间,仅包括内核系统调用。 |
空闲 | 这是空闲时间,即任何正在运行的进程未使用的时间。 |
nice | 这是以正 nice 级别运行的进程使用的时间。 |
irq | 这些是占用 CPU 时间的中断请求。 |
iowait | 这些是花费在等待 I/O 发生的 CPU 周期——这是浪费的 CPU 时间。 |
steal | 虚拟 CPU 等待真实 CPU 时,hypervisor 为另一个虚拟处理器提供服务的 CPU 周期百分比。 |
ctx-sw | 这些是每秒上下文切换的次数;它表示 CPU 每秒从运行一个进程切换到运行另一个进程的次数。 |
inter | 这是每秒硬件中断的次数。当硬件设备(例如硬盘驱动器)告诉 CPU 它已完成数据传输或网卡已准备好接受更多数据时,会发生硬件中断。 |
sw_int | 软件中断告诉 CPU 某些请求的任务已完成或软件已准备好进行某些操作。这些在内核级软件中往往更常见。 |
关于 nice 值
Nice 值是管理员用来影响进程优先级的机制。无法直接更改进程的优先级,但是更改 nice 值可以修改内核调度程序的优先级设置算法的结果。Nice 值的范围从 -20 到 +19,其中较高的数字更“nice”。默认 nice 值为 0,默认优先级为 20。将 nice 值设置为高于零会稍微增加优先级值,从而使进程更“nice”,因此占用更少的 CPU 周期。将 nice 值设置为更负的数字会导致优先级值降低,从而使进程不那么“nice”。可以使用 renice 命令或从 top、atop 和 htop 中更改 Nice 值。
内存
摘要部分的内存部分包含有关内存使用情况的统计信息。
MEM | 这显示内存使用率,以可用总量的百分比表示。 |
总计 | 这是主机中安装的 RAM 内存总量,减去分配给显示适配器的任何量。 |
已用 | 这是系统和应用程序程序正在使用的内存总量,但不包括缓存或缓冲区。 |
可用 | 这是可用内存量。 |
活动 | 这是活动使用的内存量——非活动内存可能会被交换到磁盘,以防需要。 |
非活动 | 这是正在使用但已有一段时间未访问的内存。 |
缓冲区 | 这是用于缓冲区空间的内存;它通常用于通信和 I/O,例如网络。接收到的数据会被存储,直到软件可以检索以供使用或可以发送到存储设备或传输到网络。 |
已缓存 | 这是用于存储磁盘传输数据的内存,直到程序可以使用或存储到磁盘。 |
如果您对交换空间及其工作原理有所了解,则交换部分是不言自明的。这显示了可用的交换空间总量、已用量以及剩余量。
摘要部分的负载部分显示一分钟、五分钟和十五分钟的平均负载。
您可以使用数字键 1、3、4 和 5 来更改此部分中数据的视图。2 键可切换左侧边栏的显示和隐藏。
关于平均负载的更多信息
平均负载通常被误解,即使它们是衡量 CPU 使用率的关键标准。但是,例如,当我说一分钟(或五分钟或十分钟)平均负载为 4.04 时,它到底是什么意思?平均负载可以被认为是 CPU 需求的度量;它是一个表示等待 CPU 时间的平均指令数的数字,因此它是 CPU 性能的真实度量。
例如,完全利用的单处理器系统 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 日刊中发表了一篇关于 平均负载、其理论、背后的数学原理以及如何解释它们的优秀文章。不幸的是,Linux Journal 已停止出版,其存档不再直接可用,因此链接指向第三方存档。
查找 CPU 占用大户
使用像 Glances 这样的工具的原因之一是查找占用过多 CPU 时间的进程。打开一个新的终端会话(与运行 Glances 的会话不同),然后输入并启动以下 CPU 占用 Bash 程序。
X=0;while [ 1 ];do echo $X;X=$((X+1));done
此程序是一个 CPU 占用大户,将耗尽每个可用的 CPU 周期。让它运行,同时您完成本文并尝试 Glances。它将为您提供一个程序占用 CPU 周期的概念。务必观察一段时间内平均负载的影响,以及此进程的 TIME+ 列中的累积时间。
进程部分
进程部分显示有关每个正在运行的进程的标准信息。根据查看模式和终端屏幕的大小,将为正在运行的进程显示不同的信息列。具有足够宽的终端的默认模式显示下面列出的列。如果终端屏幕调整大小,则显示的列会自动更改。以下列通常从左到右显示每个进程。
CPU% | 这是 CPU 时间,以单个内核的百分比表示。例如,98% 表示单个内核可用 CPU 周期的 98%。多个进程可以显示高达 100% 的 CPU 使用率。 |
MEM% | 这是进程使用的 RAM 内存量,以主机中总虚拟内存的百分比表示。 |
VIRT | 这是进程使用的虚拟内存量,以人类可读的格式表示,例如 12M 表示 12 兆字节。 |
RES | 这是指进程使用的物理(常驻)内存量。同样,这是人类可读的格式,带有 K、M 或 G 指示符,分别指定千字节、兆字节或千兆字节。 |
PID | 每个进程都有一个标识号,称为 PID。此编号可用于命令(例如 renice 和 kill)来管理进程。请记住,除了“kill”信号外,kill 实用程序还可以向另一个进程发送信号。 |
USER | 这是拥有该进程的用户的名称。 |
TIME+ | 这表示进程自启动以来累积的 CPU 时间总量。 |
THR | 这是当前为此进程运行的线程总数。 |
NI | 这是进程的 nice 值。 |
S | 这是当前状态;它可以是 (R) 运行、(S) 睡眠、(I) 空闲、当进程在调试跟踪期间停止时为 T 或 t,或 (Z) 僵尸。僵尸是一个已被杀死但尚未完全死亡的进程,因此它会继续消耗一些系统资源,例如 RAM。 |
R/s 和 W/s | 这些是每秒磁盘读取和写入次数。 |
命令 | 这是用于启动进程的命令。 |
Glances 通常会自动确定默认排序列。进程可以自动排序 (a),或按 CPU (c)、内存 (m)、名称 (p)、用户 (u)、I/O 速率 (i) 或时间 (t) 排序。进程会自动按使用最多的资源排序。在上图中,TIME+ 列突出显示。
警报部分
Glances 还在屏幕底部显示警告和严重警报,包括事件的时间和持续时间。当您尝试诊断问题并且无法长时间盯着屏幕时,这会很有帮助。可以使用 l(小写 L)键打开或关闭这些警报日志,可以使用 w 键清除警告,而可以使用 x 清除所有警报和警告。
侧边栏
Glances 在左侧有一个非常好的侧边栏,显示 top 或 htop 中不可用的信息。虽然 atop 显示其中一些数据,但 Glances 是唯一显示有关传感器数据的监控工具。毕竟,有时看看计算机内部的温度也不错。
可以使用 d、f、n 和 s 键分别打开和关闭各个模块、磁盘、文件系统、网络和传感器。可以使用 2 键切换整个侧边栏。可以使用 D 在侧边栏中显示 Docker 统计信息。
请注意,当 Glances 在虚拟机上运行时,不会显示硬件传感器。
获取帮助
您可以按 h 键获取帮助;再次按 h 键关闭帮助页面。帮助页面相当简洁,但它确实显示了可用的交互式选项以及如何打开和关闭它们。手册页 对启动 Glances 时可以使用的选项进行了简洁的解释。
您可以按 q 或 Esc 退出 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 可以监控主机的许多方面,但它无法管理进程。它不能像 top 和 htop 那样更改进程的 nice 值或杀死进程。Glances 不是交互式工具。它严格用于监控。可以使用 kill 和 renice 等外部工具来管理进程。
Glances 只能在可用空间中显示占用最多指定资源(例如 CPU 时间)的进程。如果空间仅可列出 10 个进程,则您只能看到这些进程。Glances 不提供滚动或反向排序选项,这些选项使您能够查看前 X 个进程之外的任何其他进程。
测量的影响
观察者效应 是一个物理学理论,指出“简单地观察情况或现象必然会改变该现象。” 在测量 Linux 系统性能时,情况也是如此。
仅仅使用监控工具就会改变系统对资源的使用,包括内存和 CPU 时间。top 实用程序和大多数其他监控工具可能使用系统 CPU 时间的 2% 到 3%。Glances 实用程序的影响比其他实用程序大得多;它通常使用 CPU 时间的 10% 到 20%,我曾经见过它在一个具有 32 个 CPU 的非常大型且活跃的系统中使用了高达一个 CPU 的 40%。这很多,因此当您考虑将 Glances 用作监控工具时,请考虑其影响。
我个人的意见是,当您需要 Glances 的功能时,这是一个很小的代价。
摘要
尽管 Glances 缺乏交互功能(例如 renice 或 kill 进程的能力)以及 CPU 负载较高,但我发现 Glances 是一款非常有用的工具。完整的 Glances 文档 可在互联网上获得,Glances 手册页包含启动选项和交互式命令信息。
本文的部分内容基于 David Both 的新书 使用和管理 Linux:卷 2 – 从零到系统管理员:高级主题。
3 条评论