尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
windows_exporter memory collector 深度解析:Windows 内存指标采集原理、完整指标清单与监控告警实践
可观测性指标监控【免费下载链接】windows_exporterPrometheus exporter for Windows machines项目地址https://gitcode.com/gh_mirrors/wi/windows_exporter点击查看免费下载本篇以 windows_exporter 的 memory collector 文档为核心系统讲解该采集器的数据来源Windows Performance Counters 与GlobalMemoryStatusExAPI、全部 35 项windows_memory_*指标的含义与类型并结合仓库源码说明其采集调用链、PromQL 查询示例与告警规则写法。读完后你可以独立完成 Windows 主机的内存用量监控、Commit 告警配置并能看懂指标背后的 Windows 分页机制语义。一、memory collector 概览memory collector 是 windows_exporter 用于暴露系统内存使用情况的采集器其基本属性如下与 collector 文档 一致属性说明Metric name prefixmemory完整指标名带windows_前缀如windows_memory_available_bytesData sourcePerformance Counters性能计数器Classes无 WMI Class直接读取Memory性能对象Enabled by default?是默认启用memory 属于默认启用的采集器之一。从源码 DefaultCollectors 定义 可以确认const DefaultCollectors cpu,memory,logical_disk,physical_disk,net,os,service,system因此只要以默认参数启动 windows_exporter无需任何额外配置即可采集全部内存指标如需手动指定采集器列表也无需为 memory 传任何 Flag该 collector 无命令行参数源码 NewWithFlags 直接返回空Collector{}其 Config 为空结构体。二、数据来源两条并行的采集路径从 memory collector 实现 的Collect方法可以看到一次采集由两个子过程组成错误会分别包装后合并返回func (c *Collector) Collect(ch chan- prometheus.Metric, _ time.Duration) error { errs : make([]error, 0) if err : c.collectPDH(ch); err ! nil { errs append(errs, fmt.Errorf(failed collecting memory metrics: %w, err)) } if err : c.collectGlobalMemoryStatus(ch); err ! nil { errs append(errs, fmt.Errorf(failed collecting global memory metrics: %w, err)) } return errors.Join(errs...) }2.1 路径一PDH 性能计数器绝大多数指标在Build阶段采集器通过通用 PDH 框架订阅Memory性能对象的全部实例_Totalc.perfDataCollector, err pdh.NewCollectorperfDataCounterValues), pdh.CounterTypeRaw, Memory, pdh.InstancesAll)第 3 个参数Memory即 Windows 性能对象Memory对应 Win32 计数器库中的 PerfOS/Memorypdh.CounterTypeRaw表示读取 Raw 计数器类型保证跨采样周期数值可直接累积为 counter 语义泛型参数perfDataCounterValues是 types.go 中定义的映射结构体用perfdatatag 把每个字段与 Windows 计数器名一一绑定例如type perfDataCounterValues struct { AvailableBytes float64 perfdata:Available Bytes CommitLimit float64 perfdata:Commit Limit PageFaultsPerSec float64 perfdata:Page Faults/sec StandbyCacheCoreBytes float64 perfdata:Standby Cache Core Bytes // ... 共 35 个计数器 }PDH 框架见 internal/pdh/collector.go基于反射解析这些 tag自动完成计数器句柄的创建、采样与按字段回填memory collector 本身无需手写任何 Win32 调用。2.2 路径二GlobalMemoryStatusEx3 项全局状态指标另外 3 项指标来自 Win32 API由 collectGlobalMemoryStatus 完成memoryStatusEx, err : sysinfoapi.GlobalMemoryStatusEx()sysinfoapi 通过kernel32.dll的GlobalMemoryStatusEx进程序调用读取MEMORYSTATUSEX结构体并将 3 个字段映射为 Prometheus 指标指标MEMORYSTATUSEX 字段含义windows_memory_process_memory_limit_bytesUllTotalVirtual调用进程用户态虚拟地址空间大小取决于进程类型、处理器与系统配置windows_memory_physical_total_bytesUllTotalPhys操作系统可见的物理内存总量windows_memory_physical_free_bytesUllAvailPhys立即可重用的物理内存standby、free、zero 三个页表之和注意源码中的指标命名差异PDH 路径的“可用内存”对应windows_memory_available_bytes来自Available Bytes计数器而 API 路径的physical_free_bytes对应AvailPhys。两者语义相近都包含可回收页日常使用任一方均可计算内存使用率官方示例查询采用的是physical_free_bytes。三、完整指标清单35 项以下为 memory collector 暴露的全部指标与 collector 文档 保持一致按功能域分组说明。所有指标均无标签Labels 为 None。3.1 物理内存与可用内存指标名类型说明windows_memory_available_bytesgauge可立即分配给进程或系统使用的物理内存等于 standby缓存、free 与 zero 页表之和windows_memory_physical_free_bytesgauge当前未使用且可立即可用的物理内存字节数来自GlobalMemoryStatusExwindows_memory_physical_total_bytesgauge操作系统可用的物理内存总量。该值不一定等于真实物理内存而是报告给操作系统的可用量windows_memory_process_memory_limit_bytesgauge单个进程可分配的最大内存字节数用户态虚拟地址空间大小3.2 文件系统缓存与页表指标名类型说明windows_memory_cache_bytesgauge当前文件系统缓存占用的字节数windows_memory_cache_bytes_peakgauge自系统上次重启以来 CacheBytes 的峰值windows_memory_cache_faults_totalcounter在文件系统缓存中找不到目标页、需从内存其他位置软故障或磁盘硬故障取回的故障次数windows_memory_free_and_zero_page_list_bytesgauge分配给 free/zero 页表的物理内存不含缓存数据可立即分配windows_memory_modified_page_list_bytesgauge分配给 modified 页表的物理内存含已被修改、需先写回磁盘才能释放的缓存数据windows_memory_standby_cache_core_bytesgaugecore 优先级 standby 缓存页表占用的物理内存。系统缺少 free/zero 内存时低优先级 standby 页先被征用windows_memory_standby_cache_normal_priority_bytesgauge普通优先级 standby 缓存页表占用的物理内存windows_memory_standby_cache_reserve_bytesgaugereserve 优先级 standby 缓存页表占用的物理内存windows_memory_standby_cache_lifetime_secondsgauge页驻留于 standby 缓存页表的长期平均时长秒数值偏低通常意味着内存压力windows_memory_system_cache_resident_bytesgauge系统文件缓存中当前驻留并活跃于物理内存的部分3.3 Commit提交内存指标名类型说明windows_memory_commit_limit_bytesgauge无需扩展分页文件即可提交的虚拟内存上限物理内存 分页文件容量windows_memory_committed_bytesgauge当前已提交的虚拟内存字节数Commit 接近 limit 时即使物理内存尚有剩余新的内存分配也会失败——这是与“物理内存使用率”不同维度的故障模式mixin 中为此单独立了WindowsMemoryCommitHighUsage告警。3.4 页故障与分页Paging指标名类型说明windows_memory_page_faults_totalcounterCPU 处理故障页的总速率所有页故障之和windows_memory_demand_zero_faults_totalcounter用清零页满足的故障次数。清零页是 Windows 的安全特性防止进程读到此前使用者留下的数据windows_memory_transition_faults_totalcounter通过回收“正被其他共享进程使用、位于 modified/standby 页表、或正在写回磁盘”的页而无需额外磁盘活动解决的故障数windows_memory_transition_pages_repurposed_totalcounter过渡缓存页被改作他用的速率这些页本可留在页缓存中提供软故障加速windows_memory_write_copies_totalcounter因写操作触发、通过从物理内存其他位置拷贝页而满足的页故障数Copy-on-Writewindows_memory_swap_page_reads_totalcounter磁盘页读取操作次数一次读多页只计一次windows_memory_swap_pages_read_totalcounter所有页读操作中读回的页总数即使同批读取也逐页计数windows_memory_swap_pages_written_totalcounter所有页写操作中写出的页总数windows_memory_swap_page_operations_totalcounter换页读 写的总次数PagesPerSec 计数器windows_memory_swap_page_writes_totalcounter磁盘页写操作次数一次写多页只计一次其中swap_page_reads_total硬故障读盘是最能反映“内存压力是否真实导致换页”的指标物理内存使用率高但页读为 0说明被占用的主要是可回收的缓存。3.5 内核内存池Pool指标名类型说明windows_memory_pool_nonpaged_bytesgaugenon-paged pool 占用字节数。该区域存放不能写盘、只要被分配就必须常驻物理内存的对象windows_memory_pool_nonpaged_allocs_totalgauge*non-paged pool 的分配调用次数文档标注为 gauge对应计数器PoolNonpagedAllocswindows_memory_pool_paged_bytesgaugepaged pool 占用字节数windows_memory_pool_paged_resident_bytesgaugepaged pool 中当前驻留于物理内存且活跃的部分windows_memory_pool_paged_allocs_totalcounterpaged pool 的分配调用次数不论每次分配多少空间non-paged pool 持续增长而应用工作集没有变化时通常指向内核驱动内存泄漏——官方 Memory 仪表盘面板的描述即如此提示见 memory 仪表盘定义“A steadily growing nonpaged pool usually means a driver leaks memory.”。3.6 系统代码与驱动指标名类型说明windows_memory_system_code_resident_bytesgauge当前驻留并活跃于物理内存的可分页操作系统代码windows_memory_system_code_total_bytesgauge已映射进系统虚拟地址空间的可分页 OS 代码总量Ntoskrnl.exe、Hal.dll、启动驱动与文件系统驱动之和不含必须常驻物理内存的代码windows_memory_system_driver_resident_bytesgauge设备驱动占用的可分页物理内存驱动工作集是System Driver Total Bytes的组成部分windows_memory_system_driver_total_bytesgauge设备驱动占用的可分页虚拟内存总量含物理部分与已换出到磁盘的代码/数据四、常用 PromQL 查询文档给出的“查看某实例内存使用率%”的示例查询100 - 100 * windows_memory_physical_free_bytes{instancelocalhost} / windows_memory_physical_total_bytesmixin 中基于同一指标组的派生查询见 lib/queries.libsonnet 与 rules.libsonnet值得在实际环境直接复用# 内存使用率比例0~1 1 - windows_memory_available_bytes / windows_memory_physical_total_bytes # 已用物理内存total - available windows_memory_physical_total_bytes - windows_memory_available_bytes # Commit 使用比例0~1 windows_memory_committed_bytes / windows_memory_commit_limit_bytes # 换页操作速率硬故障信号 rate(windows_memory_swap_page_operations_total[5m]) # 缓存合计mixin 的 windows:memory_cached:bytes 记录规则 windows_memory_cache_bytes windows_memory_modified_page_list_bytes windows_memory_standby_cache_core_bytes windows_memory_standby_cache_normal_priority_bytes windows_memory_standby_cache_reserve_bytesmixin 将上述表达式固化为记录规则windows:memory_usage:ratio、windows:memory_used:bytes、windows:memory_committed:ratio等仪表盘与告警统一引用记录规则而不是重复计算告警规则见 alerts.libsonnet。配套的可视化定义在 memory 仪表盘 中包含 Physical memory、Commit charge、Paging、Kernel pools and cache 四组面板。五、告警示例文档提供了两条可直接使用的告警规则示例prometheus.rules# Alert on hosts that have exhausted all available physical memory - alert: MemoryExhausted expr: windows_memory_physical_free_bytes 0 for: 10m labels: severity: high annotations: summary: Host {{ $labels.instance }} is out of memory description: {{ $labels.instance }} has exhausted all available physical memory # Alert on hosts with greater than 90% memory usage - alert: MemoryLow expr: 100 - 100 * windows_memory_physical_free_bytes{instancelocalhost} / windows_memory_physical_total_bytes 90 for: 10m labels: severity: warning annotations: summary: Memory usage for host {{ $labels.instance }} is greater than 90%两点使用说明示例中{instancelocalhost}需要替换为你实际的实例标签或使用instance~...形式匹配多台主机MemoryExhausted用“free 恒等于 0”判定内存耗尽语义严格但可能滞后生产实践中更常见的是按阈值比例告警。仓库 mixin 提供的等价生产级告警阈值可通过配置调整默认 90%持续 15 分钟alert( WindowsMemoryHighUsage, q.metric(windows:memory_usage:ratio) * 100 %s % c.memoryHighUsageThreshold, 15m, warning, Windows memory usage is high, ... ), alert( WindowsMemoryCommitHighUsage, q.metric(windows:memory_committed:ratio) * 100 %s % c.memoryCommitHighUsageThreshold, 15m, warning, Windows memory commit usage is high, ... ),两条告警分别对应两份 Runbook可直接作为处置参考WindowsMemoryHighUsage 处置手册按“确认使用率比例 → 检查换页速率与 Commit 比例 → 资源监视器查工作集/硬故障 → 检查内核 pool 是否增长”的顺序排查强调“高使用率比例本身不等于系统正在大量换页”WindowsMemoryCommitHighUsage 处置手册Commit 告警时即使物理内存仍有剩余系统也可能拒绝新的内存提交导致应用失败手册给出了检查分页文件的 PowerShell 命令Get-CimInstance Win32_PageFileUsage等并说明调整分页文件会影响 Commit 上限但不增加物理内存。六、验证与测试memory collector 的行为由 memory_test.go 覆盖TestCollector通过testutils.TestCollector在 Windows 环境完成一次真实采集断言指标命名、类型与一致性BenchmarkCollector提供采集耗时的基准测试。该测试文件带//go:build windows约束只能在 Windows 上运行与整个 exporter 的构建目标一致。七、小结memory collector 默认启用、无配置项数据来源为 PDHMemory性能对象CounterTypeRaw、全实例订阅GlobalMemoryStatusExAPI两条路径分别产出 32 项与 3 项指标指标分五类语义域物理内存/可用内存、缓存与页表、Commit、页故障与分页、内核池与系统代码排查“内存压力”时应组合使用如高使用率 rate(windows_memory_swap_page_reads_total)判断真实换页告警建议同时覆盖“物理内存使用率”与“Commit 比例”两个维度并参考仓库 mixin 的记录规则与 Runbook 落地为完整监控方案。赞分享可观测性指标监控【免费下载链接】windows_exporterPrometheus exporter for Windows machines项目地址https://gitcode.com/gh_mirrors/wi/windows_exporter点击查看免费下载相关推荐windows_exporter license collector 详解监控 Windows 授权状态的指标、告警与 slc.dll 实现原理windows_exporter license collector 详解监控 Windows 授权状态的指标、告警与 slc.dll 实现原理 本文围绕 w可观测性指标监控windows_exporter DNS 采集器深度解析指标清单、子采集器配置与源码实现windows_exporter DNS 采集器深度解析指标清单、子采集器配置与源码实现 本文围绕 windows_exporter 的 DNS 采集器展开可观测性指标监控windows_exporter container 采集器Hyper-V 容器与 Windows Pod 指标监控完整指南windows_exporter container 采集器Hyper V 容器与 Windows Pod 指标监控完整指南 导读 container 采集器可观测性指标监控创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Obsidian接入AI(DeepSeek)指南

Obsidian接入AI(DeepSeek)指南

一、关键原理 Obsidian 是本地软件,所有笔记是纯文本 Markdown (即.md)文件。DeepSeek 的 API 不能直接读你电脑上的文件,所有中间需要一个「桥梁」插件:由插件读取你的笔记库内容、按需检索,再发给 DeepSe…

📅 2026/10/14 16:14:34
QOwnNotes 在 Fedora Linux 上的安装与仓库维护指南

QOwnNotes 在 Fedora Linux 上的安装与仓库维护指南

桌面应用 【免费下载链接】QOwnNotes QOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration. 项目地址: https://gitcode.com/gh_mirrors/qo/QOwnNotes 点击查看 免费下载 本指南面向 Fedor…

📅 2026/10/14 16:09:33
Linux运维详解权限777和755的区别!

Linux运维详解权限777和755的区别!

Linux 文件权限是系统安全的核心基石,它通过严格的权限划分,决定了不同用户、用户组对文件和目录的访问、修改、执行权限,直接关系到系统的稳定性与数据安全。那么Linux文件权限777和755的区别是什么?请看下文。Linux文件权限使用三位数字来…

📅 2026/10/14 16:09:33
MORE NEWS

更多资讯

📰

openHiTLS 社区贡献指南:CLA 签署、Issue 讨论与本地构建验证实战

密码学网络安全 【免费下载链接】openHiTLS 旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践&#xff…

📰

视频播放异常排查:非APP层导致的黑屏卡顿根因定位

干播放器开发的,多少都经历过这种夜晚:线上反馈视频黑屏、卡顿、一直转圈,第一反应把APP代码翻了个底朝天,日志加了十几处,甚至回滚了两个版本,问题还在。后来才发现,出问题的环节根本不在APP层…

📰

玲珑轮胎登上山东台:一条轮胎凭什么跑出“山东好品”的底气

近日,玲珑轮胎登上山东电视台新闻频道《市场监管在线》栏目“好品山东‘链’成记—企业说好品”,以“质量是企业的生命线”为主题,玲珑轮胎常务副总裁孙松涛介绍了玲珑通过提高制造标准、加大研发能力、提升产品性能、严格把控质量、紧抓细节…

📰

PRAXIST 直接 CLI 运维指南:从校验、启动到观察、停止与恢复的完整生命周期

人工智能AI Agent多智能体Agent 工作流深度研究AI 评测 【免费下载链接】PRAXIST Autonomous research system for measurable, computer-executable research. 项目地址: https://gitcode.com/gh_mirrors/pr/PRAXIST 点击查看 免费下载 本文是面向运维人员&#x…

📰

ATF转换PNG/JPG工具实战:从识别文件头到DXT1解压的完整指南

简介:这是一款专门将Adobe纹理格式(ATF)转换为PNG或JPG格式的实用工具,面向Stage3D开发者、Flash/Air游戏美工及需要跨平台处理ATF纹理的图形工作者。资源包合计30个文件,压缩后约13.58MB,内含exe主程序、d…

📰

GuardianShell主动式AI野生动物哨兵:边缘计算架构与部署实战

1. 从零拆解 GuardianShell:一个主动式 AI 野生动物哨兵到底在解决什么问题第一次看到 GuardianShell 这个标题,我脑子里蹦出来的不是“又一个 AI 摄像头”,而是一个很具体的画面:凌晨两点,某片山区农场的边缘&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬