Glances 内存监控深入解析:RAM/SWAP 统计字段、趋势指示与告警阈值配置
2026/9/20 9:13:21 网站建设 项目流程
  • 指标监控
  • 监控大盘
  • CLI
  • 告警
  • MCP 服务

【免费下载链接】glances

Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.

项目地址:https://gitcode.com/gh_mirrors/gl/glances
点击查看免费下载

导读:本文以 Glances 官方文档 docs/aoa/memory.rst 为骨架,系统讲解 Glances 内存监控模块(RAM 与 SWAP)的全部统计字段含义、TUI 界面布局、API 暴露的扩展字段,并结合仓库源码剖析psutil采集流程、ZFS 缓存修正、趋势计算与告警阈值机制。阅读完成后,你将能准确读懂 Glances 内存面板的每一行输出,并熟练通过 conf/glances.conf 定制「显示 available 内存」与 RAM/SWAP 告警阈值。

Glances 的内存监控采用双列布局:一列展示RAM,一列展示SWAP。当终端有足够宽度时,RAM 列还会展开显示active(活动)、inactive(非活动)、buffers(缓冲区)等扩展信息:

一、RAM 统计字段全解

根据官方文档定义,RAM 列中的核心统计字段含义如下:

字段含义平台限制
percent内存使用百分比,计算公式为(total - available) / total * 100全平台
total物理内存总量全平台
used已使用内存,不同平台计算方式不同,仅供信息参考;计算式为used = total - free(其中free = available + buffers + cached全平台
free完全未使用(已清零)的内存,立即可用;注意它不能反映真实可用内存(请改用available全平台
active当前正在使用或最近使用、仍驻留在 RAM 中的内存UNIX
inactive被标记为不再使用的内存UNIX
buffers文件系统元数据等内容的缓存Linux、BSD
cached各类内容的缓存(包含 ZFS 缓存)Linux、BSD

仅通过 API 暴露的扩展字段

以下字段不会直接出现在 TUI 界面,但可通过 RESTful API / JSON 输出(如glances -w/api/4/mem)获取:

字段含义平台限制
available可以立即分配给请求内存的进程的真实可用内存(字节);由不同平台的内存值求和得出(如 Linux 下为free + buffers + cached),适合用于跨平台监控真实内存占用全平台
wired被标记为永远驻留 RAM、绝不会换出到磁盘的内存BSD、macOS
shared可被多个进程同时访问的内存BSD
percent_minGlances 启动以来观察到的内存使用百分比最小值全平台
percent_maxGlances 启动以来观察到的内存使用百分比最大值全平台
percent_meanGlances 启动以来观察到的内存使用百分比平均值全平台

这些字段在源码中有精确对应。在 glances/plugins/mem/init.py 的fields_description中,每个字段都声明了描述、单位(bytes/percent)与最小显示符号(K);percent字段带有'mmm': True标记,这是percent_min/percent_max/percent_mean三个派生字段被自动生成并跟踪的开关。

二、源码视角:RAM 数据是如何采集的

MemPlugin的本地采集逻辑位于 glances/plugins/mem/init.py 的_update_for_local方法,其数据源是psutil.virtual_memory()

  1. 调用psutil.virtual_memory()获取系统虚拟内存快照;
  2. 依次尝试读取totalavailablepercentusedfreeactiveinactivebufferscachedwiredshared等属性,hasattr检查保证了平台差异字段(如 macOS 才有wired)不会导致崩溃;
  3. 对结果做平台无关修正后返回。

值得注意的两处工程细节:

  • ZFS 缓存修正:当系统存在/proc/spl/kstat/zfs目录时(由 glances/plugins/fs/zfs.py 的zfs_enable()判定),插件会读取arcstats数据,将 ZFS ARC 缓存大小累加进cached,把可回收部分(zfs_size - c_min)计入available,并从used中扣除,最后重新计算percent。这一修正解决了 ZFS 环境下内存占用虚高的问题(对应 issue #3979)。
  • LXC/cgroup-v2 容器钳制:在 LXC / cgroup-v2 容器中,内核可能报告available > total(内存超卖或 cgroup 记账异常)。代码通过stats['used'] = max(0, total - available)percent = max(0.0, min(100.0, percent))usedpercent钳制在[0, total]/[0, 100]范围内,避免界面出现负值。

此外,插件还支持SNMP 采集(见 glances/plugins/mem/init.py 的snmp_oid定义):Linux 等系统通过 UCD-SNMP 内存 OID(如.1.3.6.1.4.1.2021.4.5.0)获取 total/free/shared/buffers/cached;Windows 与 VMware ESXi 则从文件系统表的Physical Memory/Real Memory条目换算得出。

三、SWAP 统计字段与采集实现

MemswapPlugin(见 glances/plugins/memswap/init.py)负责 SWAP 列。本地模式下调用psutil.swap_memory(),返回字段包括:

字段含义
total交换空间总量
used已使用的交换空间
free空闲交换空间
percent交换空间使用百分比
sin从磁盘换入的字节数(累计值)
sout从磁盘换出的字节数(累计值)
time_since_update距离上次更新的秒数

其中sin/sout累计值,插件额外记录time_since_update(通过 glances/timer.py 的getTimeSinceLastUpdate('memswap')获取),使 XML/RPC 与 RESTful API 使用者无需自行计时即可计算出换入换出速率。percent同样被登记进items_history_list(见 glances/plugins/memswap/init.py),配合--enable-history参数可进行历史记录。SWAP 列还包含对 Illumos(无 swap 时报错,issue #1767)与 OpenBSD(无 swap 分区时崩溃,issue #2719)的异常兜底处理。

四、用 available 替代 used:[mem]配置节

默认情况下 TUI 第三行显示used内存。官方文档指出:通过配置文件[mem]节设置available选项为True,即可改显available(真实可用内存)。

在默认配置 conf/glances.conf 中该选项以注释形式给出:

[mem] disable=False # Display available memory instead of used memory #available=True # Define RAM thresholds in % # Default values if not defined: 50/70/90 careful=50 warning=70 critical=90 #critical_action_repeat=echo "{{time}} {{percent}} higher than {{critical}}"" >> /tmp/memory.alert

取消available=True的注释后重启 Glances 即可生效。源码层面的读取逻辑在 glances/plugins/mem/init.py:

self.available = self.get_conf_value('available', default=['False'])[0].lower() == 'true'

而界面渲染时的分支位于 glances/plugins/mem/init.py 的msg_curse方法:self.available为真时输出available,否则输出used

五、MEM 标题后的趋势指示符

在每个插件标题(MEM / SWAP)之后都会显示一个趋势字符,表示内存使用百分比在时间维度上的走向。其判定规则(get_trend实现于 glances/plugins/plugin/model.py,默认取最近 30 个采样点):

趋势字符判定条件
-最近 15 个值的均值 ≈ 之前 15 个值的均值(差值小于 1 个百分点的显著性阈值)
最近 15 个值的均值 < 之前 15 个值的均值(差值超过显著性阈值)
最近 15 个值的均值 > 之前 15 个值的均值(差值超过显著性阈值)

具体算法为:取最近nb=30个历史值,计算后半段(15 个)与前半段(15 个)均值的差值;若差值为正且大于significant=1显示上箭头,为负且小于-1显示下箭头,否则显示-。箭头渲染由 trend_msg 通过unicode_message('ARROW_UP'/'ARROW_DOWN')完成,在非 UTF-8 终端下会自动退化为 ASCII 字符。当历史数据不足 30 个采样点时趋势显示为空格。

六、告警机制与阈值配置

告警仅针对 used 内存与 used swap(即不针对 free / available / cached 等派生字段)。告警状态由update_views方法计算:在 glances/plugins/mem/init.py 中,通过self.get_alert_log(self.stats['used'], maximum=self.stats['total'])计算;memswap 插件则以同样方式计算(见 glances/plugins/memswap/init.py)。

默认告警级别按使用百分比划分:

使用率状态
< 50%OK
> 50%CAREFUL
> 70%WARNING
> 90%CRITICAL

阈值可被配置文件覆盖。官方文档提示在配置文件的[memory]与/或[memswap]节修改;在当前仓库的实际默认配置中,对应的节名为[mem][memswap](见 conf/glances.conf):

[mem] disable=False careful=50 warning=70 critical=90 [memswap] disable=False # Define SWAP thresholds in % # Default values if not defined: 50/70/90 careful=50 warning=70 critical=90 #warning_action=echo "{{time}} {{percent}} higher than {{warning}}"" > /tmp/memory.alert

配置注释中还给出了动作示例:critical_action_repeat/warning_action支持在阈值触发时执行自定义 shell 命令,模板变量{{time}}{{percent}}{{critical}}{{warning}}会被实际值替换,可用于将内存告警写入日志或触发外部脚本。

七、TUI 布局与 API 输出验证

msg_curse方法(glances/plugins/mem/init.py)定义了 RAM 列的完整 TUI 布局,共四行:

  1. 第一行:MEM标题 + 趋势字符 + 内存使用百分比(带告警配色)+active
  2. 第二行:total+inactive
  3. 第三行:used(或available,取决于配置)+buffers
  4. 第四行:free+cached

SWAP 列布局相对简单,为标题 + 趋势 + 百分比、totalusedfree四行结构。

这些字段与行为均有测试用例兜底验证,见 tests/test_plugin_mem.py:

  • 基础字段测试(tests/test_plugin_mem.py)断言update()后必须包含totalavailableusedfreepercent五个必备键;
  • MMM 测试(tests/test_plugin_mem.py)验证percent_min/percent_max/percent_mean'mmm': True自动生成描述、单位与取值区间,并确认这些字段同时出现在get_api()、JSON 输出与 export 输出中;
  • 告警测试(tests/test_plugin_mem.py)验证get_alert_log返回OK/CAREFUL/WARNING/CRITICAL等合法状态。

结语

Glances 的内存监控看似只是界面上的两列数字,背后却是「psutil原生字段 + 平台差异修正 + ZFS 缓存调整 + 容器钳制 + SNMP 降级」的完整链路。理解percentavailableusedfree等字段的精确定义,是避免误读内存占用(尤其是 Linux 下缓存被计为已用内存)的关键;而[mem]/[memswap]配置节则提供了从「显示口径」到「告警阈值」再到「自定义告警动作」的完整定制能力。若需进一步了解 RESTful API 输出格式,可参阅 docs/api/restful.rst;若需监控其他内存相关维度(如进程级内存),可结合 docs/aoa/ps.rst 与进程列表插件一起使用。

  • 指标监控
  • 监控大盘
  • CLI
  • 告警
  • MCP 服务

【免费下载链接】glances

Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.

项目地址:https://gitcode.com/gh_mirrors/gl/glances
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询