Glances 内存监控深入解析:RAM/SWAP 统计字段、趋势指示与告警阈值配置
指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances 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 中的内存UNIXinactive被标记为不再使用的内存UNIXbuffers文件系统元数据等内容的缓存Linux、BSDcached各类内容的缓存包含 ZFS 缓存Linux、BSD仅通过 API 暴露的扩展字段以下字段不会直接出现在 TUI 界面但可通过 RESTful API / JSON 输出如glances -w或/api/4/mem获取字段含义平台限制available可以立即分配给请求内存的进程的真实可用内存字节由不同平台的内存值求和得出如 Linux 下为free buffers cached适合用于跨平台监控真实内存占用全平台wired被标记为永远驻留 RAM、绝不会换出到磁盘的内存BSD、macOSshared可被多个进程同时访问的内存BSDpercent_minGlances 启动以来观察到的内存使用百分比最小值全平台percent_maxGlances 启动以来观察到的内存使用百分比最大值全平台percent_meanGlances 启动以来观察到的内存使用百分比平均值全平台这些字段在源码中有精确对应。在 glances/plugins/mem/init.py 的fields_description中每个字段都声明了描述、单位bytes/percent与最小显示符号Kpercent字段带有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/cachedWindows 与 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] disableFalse # Display available memory instead of used memory #availableTrue # Define RAM thresholds in % # Default values if not defined: 50/70/90 careful50 warning70 critical90 #critical_action_repeatecho {{time}} {{percent}} higher than {{critical}} /tmp/memory.alert取消availableTrue的注释后重启 Glances 即可生效。源码层面的读取逻辑在 glances/plugins/mem/init.pyself.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 个值的均值差值超过显著性阈值具体算法为取最近nb30个历史值计算后半段15 个与前半段15 个均值的差值若差值为正且大于significant1显示上箭头为负且小于-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], maximumself.stats[total])计算memswap 插件则以同样方式计算见 glances/plugins/memswap/init.py。默认告警级别按使用百分比划分使用率状态 50%OK 50%CAREFUL 70%WARNING 90%CRITICAL阈值可被配置文件覆盖。官方文档提示在配置文件的[memory]与/或[memswap]节修改在当前仓库的实际默认配置中对应的节名为[mem]与[memswap]见 conf/glances.conf[mem] disableFalse careful50 warning70 critical90 [memswap] disableFalse # Define SWAP thresholds in % # Default values if not defined: 50/70/90 careful50 warning70 critical90 #warning_actionecho {{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第二行totalinactive第三行used或available取决于配置buffers第四行freecached。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 服务【免费下载链接】glancesGlances 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点击查看免费下载相关推荐Gumroad 从上架产品到收款结算开源创作者电商系统的功能指南Gumroad 从上架产品到收款结算开源创作者电商系统的功能指南 一位独立讲师在知识星球里攒够了 500 名学员想把自己的视频课正式收费但很快撞上几堵墙后端前端电商SGLang性能调优终极指南从诊断到艺术级优化SGLang性能调优终极指南从诊断到艺术级优化 在大语言模型服务化的浪潮中性能瓶颈往往是开发者面临的最大挑战。当你的LLM服务在高峰期响应缓慢当推理成本超人工智能大模型模型推理服务推理引擎本地部署LLM 网关多模态强化学习OpenSPG可编程框架KNext详解构建自定义知识图谱解决方案的完整教程OpenSPG可编程框架KNext详解构建自定义知识图谱解决方案的完整教程 OpenSPG是由蚂蚁集团与OpenKG合作开发的知识图谱引擎基于SPG语义增知识图谱后端图计算人工智能大模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考