首页/系统/Windows 运维速查/场景:内存越用越少怎么排查

场景:内存越用越少怎么排查

内存问题的三步法:看总量与可用、找增长进程、区分缓存与泄漏;先量化再动手。

Windows 运维速查系统更新于 2026-10-13

内存越用越少怎么查

内存问题要讲量化:先看总量与可用内存,再找增长最快的进程,最后区分是系统缓存占用、一次性膨胀,还是真正的泄漏。先把数据拿全再动手,避免凭感觉重启。

基本信息

适用平台Windows,PowerShell 与性能监视器均可
总量来源Win32_OperatingSystem 的 TotalVisibleMemorySize 与 FreePhysicalMemory,单位为 KB
进程排行Get-Process 按 WorkingSet64 或 PrivateMemorySize64 排序
泄漏判据私有内存持续单调增长且回收无效
辅助工具性能监视器计数器、资源监视器内存标签页
更贴近压力的指标提交量比可用内存更能反映真实紧张程度

排查步骤

  • 1. 看总体可用内存与提交量,判断是紧张还是已被系统缓存占用
  • 2. 按内存排序找出占用最大的几个进程,先排除已知的大户
  • 3. 间隔采样同一进程,看它是稳定还是持续增长
  • 4. 区分内存性质:文件缓存可释放,私有内存持续增长才像泄漏
  • 5. 结合业务日志确认是否伴随报错或变慢,避免误重启

常用示例

常用示例
# 总体可用内存,FreePhysicalMemory 单位是 KB
$os = Get-CimInstance Win32_OperatingSystem
'{0:N0} MB 可用' -f ($os.FreePhysicalMemory / 1KB)
# 已提交的虚拟内存总量
'{0:N0} MB 已提交' -f (($os.TotalVirtualMemorySize - $os.FreeVirtualMemory) / 1KB)
# 内存占用前几名,同时看工作集与私有内存
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 5 Name, @{n='工作集MB';e={[math]::Round($_.WorkingSet64/1MB)}}, @{n='私有MB';e={[math]::Round($_.PrivateMemorySize64/1MB)}}
# 间隔采样同一进程,观察趋势
Get-Process -Name mysvc | Select-Object Name, @{n='私有MB';e={[math]::Round($_.PrivateMemorySize64/1MB)}}

指标读法

指标含义判断要点
可用物理内存当前空闲的物理内存(KB)低不等于异常,系统会主动用内存做缓存
提交量已提交的虚拟内存总量比可用内存更能反映真实压力
工作集进程驻留的物理内存含共享内存,跨进程相加会重复计算
私有内存进程独占的提交内存持续增长才指向泄漏
分页文件使用换页活动强度大量换页会让系统明显变慢
Windows 会用空闲内存做文件缓存,可用内存偏低并不代表有故障。要判断是否真的紧张,应同时看提交量、换页活动与业务响应时间。
不同内存规格的机器缓存策略不同,做横向对比要选配置相近的机器,否则容易把正常的缓存差异误判成异常。

易错点

  • 把系统缓存占用的内存当成泄漏会做出不必要的重启,问题在重启后很快复现
  • 只看单次快照就下结论,内存问题必须看趋势,至少间隔数分钟到数小时对比
  • 工作集包含共享内存,把多个进程的工作集相加会超过物理内存总量,得出错误结论
  • 不同内存规格的机器直接对比占用数字,会把缓存策略差异误判为故障
  • 只清缓存不查根因,业务高峰一到问题立刻复现,应结合业务日志追增长来源

数据来源与参考

  • Microsoft Learn:Win32_OperatingSystem
  • Microsoft Learn:Get-Process

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌