- 指标监控
- 监控大盘
- CLI
- 告警
- MCP 服务
【免费下载链接】glances
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.
导读:本文以 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_min | Glances 启动以来观察到的内存使用百分比最小值 | 全平台 |
| percent_max | Glances 启动以来观察到的内存使用百分比最大值 | 全平台 |
| percent_mean | Glances 启动以来观察到的内存使用百分比平均值 | 全平台 |
这些字段在源码中有精确对应。在 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():
- 调用
psutil.virtual_memory()获取系统虚拟内存快照; - 依次尝试读取
total、available、percent、used、free、active、inactive、buffers、cached、wired、shared等属性,hasattr检查保证了平台差异字段(如 macOS 才有wired)不会导致崩溃; - 对结果做平台无关修正后返回。
值得注意的两处工程细节:
- 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))将used与percent钳制在[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 布局,共四行:
- 第一行:
MEM标题 + 趋势字符 + 内存使用百分比(带告警配色)+active; - 第二行:
total+inactive; - 第三行:
used(或available,取决于配置)+buffers; - 第四行:
free+cached。
SWAP 列布局相对简单,为标题 + 趋势 + 百分比、total、used、free四行结构。
这些字段与行为均有测试用例兜底验证,见 tests/test_plugin_mem.py:
- 基础字段测试(tests/test_plugin_mem.py)断言
update()后必须包含total、available、used、free、percent五个必备键; - 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 降级」的完整链路。理解percent、available、used、free等字段的精确定义,是避免误读内存占用(尤其是 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.
相关推荐
Gumroad 从上架产品到收款结算:开源创作者电商系统的功能指南
Gumroad 从上架产品到收款结算:开源创作者电商系统的功能指南 一位独立讲师在知识星球里攒够了 500 名学员,想把自己的视频课正式收费,但很快撞上几堵墙:
后端前端电商SGLang性能调优终极指南:从诊断到艺术级优化
SGLang性能调优终极指南:从诊断到艺术级优化 在大语言模型服务化的浪潮中,性能瓶颈往往是开发者面临的最大挑战。当你的LLM服务在高峰期响应缓慢,当推理成本超
人工智能大模型模型推理服务推理引擎本地部署LLM 网关多模态强化学习OpenSPG可编程框架KNext详解:构建自定义知识图谱解决方案的完整教程
OpenSPG可编程框架KNext详解:构建自定义知识图谱解决方案的完整教程 OpenSPG是由蚂蚁集团与OpenKG合作开发的知识图谱引擎,基于SPG(语义增
知识图谱后端图计算人工智能大模型
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考