ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows内存占用高排查与根治:从任务管理器到RAMMap全攻略

Windows内存占用高排查与根治:从任务管理器到RAMMap全攻略 内存又满了。不是没试过关后台也不是没试过重启可打开任务管理器一看物理内存占用就稳在90%左右风扇嗡嗡转鼠标飘得跟喝醉酒似的。你翻遍了系统设置甚至把第三方安全软件卸了个干净问题依旧。如果这台电脑没在跑大型游戏、没开虚拟机、也没挂着一堆IDE那基本可以断定这不是配置不够而是Windows某个隐藏故障在作妖。这篇文章专门聊内存占用异常飙升的排查与根治方案。目标很简单让你学会像老鸟一样用系统自带工具定位“真凶”分清楚哪些是正常缓存、哪些是应用失控、哪些是驱动泄漏然后对症下药。内容面向被内存问题折磨过的普通用户也适合需要给同事、客户处理电脑的运维和装机人员。不吹不黑不搞第三方优化软件忽悠人全程以Windows自带功能和官方工具为主按照这个思路走一遍大部分内存虚高问题都能揪出来。1. 先别急着“杀进程”把内存去向搞清楚很多人一看到内存占用高第一反应就是打开任务管理器把看着不顺眼的进程“结束任务”。这个操作大概率没效果甚至会误杀系统进程导致花屏、重启、驱动异常。原因很简单任务管理器默认显示的“内存”列只是进程的私有工作集而Windows的内存分配机制远比这个复杂得多。1.1 任务管理器不一定靠谱区分“使用中”和“已提交”Windows的任务管理器“性能”选项卡里内存那一块显示了好几个数字大多数人都只盯着最显眼的“使用中”。但你需要注意下面这几个概念的差别使用中物理内存里正在被进程实际占用的部分。这个数值高不代表一定有问题。可用当前空闲加上可被随时废弃的缓存数值越低越容易卡。已提交系统承诺给所有进程的虚拟内存总和它的上限是“物理内存 页面文件”。如果这个值接近上限系统会提示内存不足。缓存Windows把硬盘读取过的文件留在内存里方便下次秒开这部分随时可以让出来给其他程序用。如果你只盯着“使用中”看很容易把正常的文件缓存误判成“内存泄漏”。我见过不少同事看到内存80%多就慌了其实系统运行流畅得很。正确的做法是打开任务管理器 - “性能” - “内存”先看右上角的“已提交”容量是不是接近电脑总内存加页面文件的总量再看“可用”还有多少。如果“可用”掉到几百MB以下那才是真的紧张。1.2 用资源监视器追根溯源任务管理器的“进程”列表适合快速排序但要看清谁在真正“申请内存”资源监视器更合适。按WinR输入resmon回车切到“内存”选项卡你会看到每个进程的“提交( KB)”和“工作集( KB)”。排在第一位的永远可能是System、ntoskrnl.exe这类核心进程别慌。你需要关注的是“提交”这一列的数值排序因为提交值代表进程向系统索要的虚拟内存总量。如果一个平时只用几百MB的程序提交值涨到几个GB且只增不减那大概率就是存在内存泄漏。1.3 RAMMap与Poolmon专业工具看内核池和驱动泄漏到了这一步还没发现明显异常但内存依然高重点就该转向“内核池”和“驱动锁定”了。这里推荐微软官方工具RAMMapSysinternals套件里的一个。下载解压后以管理员身份运行切到“计数”或“进程”标签能清楚看到物理内存被分成了几类进程私有、映射文件、分页池、非分页池、驱动锁定等。驱动泄漏的典型特征就是“非分页池”和“分页池”随使用时间持续上涨。配合Poolmon.exeWindows Driver Kit里的小工具可以按Pool tag猜出泄漏的驱动模块。虽然普通用户不一定能立刻定位到具体驱动文件但这个排查思路能帮你区分“是不是杀毒软件的锅”还是“是不是网卡/显卡驱动的锅”。明白这一点后面就少走很多弯路。2. 这些“正规军”才是内存大户别误杀了排查内存问题最容易翻车的就是把系统关键进程当病毒处理。接下来逐个聊几个最常背锅、内存占用又异常高的“正规军”以及它们的真实处理方式。2.1 Antimalware Service ExecutableWindows Defender的“躲猫猫”进程名是MsMpEng.exe在任务管理器里的显示名是“Antimalware Service Executable”。很多用户一看这名字就觉得是病毒不停结束进程结果系统反而出现安全中心警告、Windows更新异常、Defender无法启动等连锁问题。实际上它是Windows自带的杀毒引擎问题不在于它本身而在于触发机制。Defender会在以下场景突然占用高内存和CPU系统空闲后执行计划扫描、游戏或大型软件运行时文件被频繁读取触发实时监控、第三方压缩包释放大量小文件。处理办法分三步走打开“Windows安全中心” - “病毒和威胁防护” - “管理设置” - 在“排除项”里把常用的大型目录比如游戏目录、开发工程目录加入排除列表。打开“计划任务” - 任务计划程序库 - Microsoft - Windows - Windows Defender右键“Windows Defender Scheduled Scan” - 属性 - 条件改成“仅在计算机空闲时运行”或干脆停用该计划。如果电脑上已安装第三方杀毒软件其实可以考虑关闭Defender的实时保护避免两套监控互相叠加产生双倍开销。注意不要通过修改注册表强行禁用Defender容易让系统安全中心“红脸”影响后续系统更新。2.2 Microsoft Edge后台进程“全家桶”Edge基于Chromium内核多进程架构决定了它天生吃内存但正常情况下标签页关闭后进程会回收。如果你发现后台一堆msedge.exe进程而且数量只增不减十有八九是开启了“启动增强”和“后台运行”。这两个功能会让Edge在关掉窗口后继续驻留后台配合“睡眠标签页”功能低优先级运行。解决路径Edge设置 - 系统和性能 - 关掉“启动增强”和“在Microsoft Edge关闭后继续运行后台扩展和应用”。另外“睡眠标签页”可以改成更激进的策略设置“5分钟不活动即进入睡眠”能明显压低内存占用。还有一类Edge缓存膨胀问题长期不清理缓存目录和用户数据目录越滚越大实际内存里缓存映射也占了不少。虽然路径在C:\Users\用户名\AppData\Local\Microsoft\Edge\User Data但你要做的不是手动删而是在设置里“清除浏览数据”时勾选“缓存的图像和文件”或者用系统自带的“存储感知”自动清理。2.3 微信/企业微信等应用wechatappex的缓存与渲染进程热词里提到的“wechatappex占用内存过高”是微信内置浏览器和部分小程序的渲染进程。很多人的电脑内存被微信吃了几百MB甚至上GB就是这个进程在搞事。它本质上是一个Chromium渲染器微信消息里的图片、公众号文章、小程序界面全由它负责。文章刷多了、页面停留在内存里不释放占用自然就高。处理建议微信设置 - 文件管理 - 打开“文件已清理”定期清理图片和视频缓存。微信设置 - 通用 - 存储空间主动清理小程序缓存。不常用小程序时在微信窗口里把小程序页面直接关闭而不要只切回聊天窗口。如果公司电脑强制装了企业微信企业微信里的文档预览、审批流程等页面同样会拉起类似的渲染进程占用高时只能注销或重启应用它没有像浏览器标签页那样的“睡眠”机制。对这种“正常但占内存”的应用最有效的办法是物理扩容内存或者升级到新版微信让官方持续优化。2.4 Device Association Service和其他系统服务又一个容易被当成“病毒”的进程Device Association Service Provider Host对应的进程名是dasHost.exe。它在连接蓝牙设备、打印机、即插即用外设时被触发服务名是DeviceAssociationService。正常情况下它占用的内存很低但如果你频繁连接/断开蓝牙耳机、手柄、或者某些鼠标的接收器它可能出现句柄泄漏内存持续上涨。处理方法右键开始菜单 - “计算机管理” - “服务和应用程序” - “服务”找到“Device Association Service”把启动类型改成“手动”。注意这和关闭其他关键服务不同设备关联服务在需要时会自动启动改成手动不会影响蓝牙和外设使用还能避免开机时被永久挂起。另一个经常毫无存在感却暗耗内存的服务是SysMain旧称Superfetch。它会在后台预加载常用软件到内存省得你点击时等半天。但如果你用的是机械硬盘或内存本来就紧张预加载带来的收益约等于零反而把内存占得死死的。打开服务管理器找到“SysMain”右键停止并禁用基本无副作用。禁用后你会发现内存占用立刻下降一截即使是固态硬盘用户也不会感觉到明显的启动变慢。3. “假占用”陷阱内存压缩、缓存与预留有一种内存占高最迷惑人进程全关、内存也显示“使用中”很高但系统并不卡。这多半是Windows的内存压缩机制在“捣乱”。3.1 Windows 10/11的内存压缩是什么东西Windows 10开始系统引入了“内存压缩”和“压缩存储”概念。简单说就是当内存不够时Windows不急着把数据写入慢速的磁盘页面文件而是在物理内存里对一部分不活跃数据做压缩腾出空间给正在运行的程序。压缩和解压由CPU负责以极低的时间成本换取更大的内存空间使用率。任务管理器 - 性能 - 内存最下面可以看到一个“压缩”数字比如“压缩 500 MB”。这意味着当前压缩存储池占用了约500MB内存而实际保存的数据可能有1GB多。这个机制本身是科学的特别是8GB内存的机器上效果明显。但问题在于压缩存储在某些时候会异常膨胀尤其是休眠唤醒、虚拟机开关机、大型游戏退出之后压缩池可能没有立即收缩。3.2 要不要关掉内存压缩Disable-MMAgent的利弊关于“关闭内存压缩”网络上有两种声音。我的观点是默认情况下不要关除非你有很多物理内存16GB以上且发现压缩池长期占据超过2GB并伴随卡顿那才值得动手。查看当前内存压缩状态用管理员身份打开PowerShell执行Get-MMAgent如果MemoryCompression显示为True说明开启状态。想关闭的话Disable-MMAgent -MemoryCompression然后重启电脑。以后想恢复就执行Enable-MMAgent -MemoryCompression重启后再次Get-MMAgent确认。说实话16GB内存的机器关掉压缩后日常使用几乎感知不到差别但内存占用显示确实能下来一些。8GB或更小的机器不建议关关了反而更容易触发页面文件频繁读写硬盘压力变大、系统更卡。3.3 页面文件与“已提交”的关系经常有人问“内存没用多少但提示虚拟内存不足”是怎么回事。这要从“已提交”的内存概念讲起。系统承诺每个进程可以有自身地址空间这个空间的总大小受“物理内存 页面文件”限制。物理内存再大如果页面文件设置得过小甚至被手动禁用系统就很容易在内存还有空闲时弹出“虚拟内存不足”。做法右键“此电脑” - 属性 - “高级系统设置” - “性能” - “设置” - “高级” - “虚拟内存” - “更改”。取消“自动管理所有驱动器的分页文件大小”选择C盘建议设置为“系统管理的大小”或者把初始大小和最大值设为物理内存的1.5倍。如果是大内存用户32GB以上也可以让系统只保留一个最小页面文件但别完全禁用否则部分软件在内存申请大块连续地址时仍可能崩溃。4. 驱动泄漏与系统组件异常最坑的隐藏故障如果上面的常规手段都试过内存占用还是会慢慢爬升那基本就是标题里说的“隐藏故障”了。这个层面不是应用层的进程而是驱动层或系统组件层面的内存泄漏也是最难定位的部分。4.1 驱动泄漏为什么难查驱动运行在内核态它们申请的内存不在任务管理器进程列表里而是被归入“非分页池”或“分页池”。如果某块网卡驱动、声卡驱动、主板芯片组驱动存在Bug每处理一次数据就泄漏一点内存那么电脑开得越久内核池占用越高最终表现为“什么都没开内存占用却一路走高”。排查工具推荐先用RAMMap。打开“空列表”里的“非分页池”标签按大小排序。如果里面有某个池标签数值特别大比如数百MB再用“Poolmon”配合微软提供的tag数据库去查询。比如常见的泄漏tag包括Proc进程对象可能是驱动频繁创建进程对象没释放。Thre线程对象和Proc类似。Ttfd与TCP/IP或文件缓存相关。FMfn文件系统缓存相关。普通用户没精力做这么深度的分析但至少可以通过设备管理器逐个检查硬件驱动右键开始菜单 - “设备管理器”重点看网络适配器、显卡、声卡、无线蓝牙等设备如果有能更新的驱动版本及时更新。很多时候厂商在更新日志里就写着“fix memory leak”或“improve memory usage”。亲身踩过的一个坑某台笔记本换了最新版显卡驱动后非分页池每2小时涨1GB。核心显卡、独立显卡驱动都换过最后发现是无线网卡驱动与Windows消息模板冲突回滚一次驱动版本后就彻底正常了。这类问题只能靠驱动版本对照实验来找答案没有捷径。4.2 那些“幽灵”句柄与Windows安全日志另一种隐藏故障是“句柄泄漏”。每个进程打开文件、注册表、网络连接等资源时系统会分配一个句柄。正常来说进程关闭后句柄会释放。但如果某个进程内部存在Bug句柄会越积累越多最终把系统可用内存耗干。在任务管理器“详细信息”页右键表头勾选“句柄”列就能按句柄数排序。正常办公环境一个进程句柄数超过几万就有嫌疑上十万的进程通常是导致系统卡顿的直接原因。还有一类“Windows安全日志”过大的问题容易被忽略。打开“事件查看器” - “Windows日志” - “安全”如果发现里面记录了海量无意义的审核事件文件库体积达到几百MB甚至几个GB那安全日志组件本身就会拖累系统性能尤其在开启“审核登录事件”或多组策略启用了详细审核的设备上。解决方法事件查看器右侧 - “清除日志”或者进入“组策略” - “Windows设置” - “安全设置” - “本地策略” - “审核策略”关闭不需要的审核项。家用电脑默认一般不会开高级审核但如果你手动开启过“审核进程创建”或者安装过安全软件残留的驱动这里就非常容易膨胀。4.3 驱动存储目录DriverStore的积压每次安装或更新驱动Windows都会把驱动文件复制一份存到C:\Windows\System32\DriverStore\FileRepository。这个目录不会自动清理时间一长可能占掉十几个GB而且其中一些残留的驱动会频繁被系统挂载检查拖慢内存与磁盘性能。虽然它主要影响磁盘空间但我见过部分情况下驱动残留也会导致drvinst进程和DeviceSetupManager内存上涨。不要直接在资源管理器里删除DriverStore目录正确做法是用pnputil工具。管理员权限打开终端pnputil /enum-drivers列出所有第三方驱动包找到不再需要的驱动用命令卸载pnputil /delete-driver oemXX.inf /uninstall /force强大的系统自带工具很多人却不知道。清理完DriverStore后配合一次系统更新“驱动提交占用”和“驱动锁定内存”一般能降下来不少。5. 实操一套相对完整的排查与优化流程前面讲了一大堆原理和工具下面梳理成一套可以直接照着走一遍的完整流程大约10分钟能完成初次排查。5.1 先做一个10分钟的“占内存”快照第一步打开任务管理器切到“性能” - “内存”记录下当前“使用中”“可用”“已提交”“压缩”四个数值。然后用管理员身份打开PowerShell按顺序执行# 查看内存压缩状态 Get-MMAgent # 查看当前内存信息 systeminfo | findstr /C:物理内存 /C:虚拟内存 systeminfo | findstr Total Physical Memory Available Physical Memory Virtual Memory # 查看占用内存前十的进程 Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, ID, {NameMem(MB);Expression{[math]::Round($_.WorkingSet64/1MB,2)}}再打开资源监视器切到“内存”按“提交”降序排列重点看排名前几的进程是否合理。如果前三名都是系统进程System、Registry、Memory Compression别着急先记下来。5.2 分场景处理针对不同根因的解决方案分四种常见情况来讲场景AAntimalware Service Executable 或 Windows Defender相关进程高按前文方法把Defender的计划扫描改为空闲时把大型目录加入排除项。如果电脑本来就有第三方杀毒软件直接在“Windows安全中心”里关闭实时保护。实测大部分杀毒共存场景这样处理后内存能降10%-20%。场景BEdge/Chrome/微信渲染进程高浏览器类的先关“启动增强”“后台运行”“内存节省程序”开关查看扩展列表禁用可疑的扩展。不要一次性开几十个标签页这是应用层最硬的限制操作系统帮不了你。微信类的聊天软件定期清理缓存文件小程序页面用完后关掉不要只最小化。场景CSystem/ntoskrnl.exe/内核池高优先怀疑驱动。用RAMMap查看“非分页池”和“分页池”的大小跟刚开机的时候对比。如果开机后缓慢上涨说明存在驱动泄漏。更新网卡驱动、显卡驱动、芯片组驱动或回滚最近安装的驱动做版本对照。这一项最费时间但只要发现问题解决后提升非常明显。场景Dsvchost.exe 高打开任务管理器展开svchost.exe右键 - “转到服务”看到具体是哪个服务挂在下面。最常踩坑的是Windows Update服务wuauserv和Delivery OptimizationDoSvc这两个服务如果长时间处于“正在挂起”状态内存和CPU都会飙高。可以运行Windows更新疑难解答或者手动重启服务net stop wuauserv net stop bits net stop dosvc net start wuauserv net start bits net start dosvc5.3 一个“重启大法”与快速释放内存的替代方案遇到内存已经飙到90%以上、电脑卡到鼠标都动不了的情况首先要做的是“安全落机”而不是开各种软件尝试释放内存。直接长按电源键强制关机是最稳妥的因为系统已无法响应正常关机流程强制关机后重启内存占用通常会回到正常水平。如果只是偶尔卡又不想重启可以“注销”当前用户WinL不生效CtrlAltDelete后选“注销”重新登入。注销会释放当前用户会话下的所有进程内存但系统和系统服务会保留效果类似“半重启”。这个方法比用第三方“内存清理”工具靠谱得多。再补充一个快速释放内存的可行命令但它是用于后台服务清理的谨慎使用# 清空工作集慎用主要对已退居后台的进程有帮助 # 效果约等于手动触发“内存压缩”不是万能的 # 建议非必要时不要运行不要迷信网上的“内存优化大师”它们做的基本只是把进程工作集强制清空实际并没减少进程对内存的申请反而可能导致更多页面文件读写卡顿可能加剧。6. 常见问题速查表下面这张表整理了我日常处理Windows内存问题时最常遇到的组合场景按“症状 可能原因 处理路径”三个维度整理方便你排查到一半时快速对照。症状可能原因处理路径开机后Defender进程吃2GB内存Windows Defender计划扫描触发或实时防护与第三方杀毒冲突调整Defender计划扫描、添加排除项、关闭实时保护关闭浏览器后内存不降浏览器启用后台运行或启动增强浏览器设置里关闭后台运行查看进程确认是否有残留微信/企业微信吃掉1GB以上内存小程序渲染进程和缓存文件过多清理微信存储空间、关闭小程序页面、更新版本内存越用越高重启后下降驱动泄漏或内核池异常RAMMap检查内核池更新/回滚网卡显卡驱动内存不高但虚拟内存不足页面文件设置过小或已被禁用虚拟内存设置为系统管理大小或自定义1.5倍“内存压缩”占掉几GBWindows 10/11内存压缩机制一般正常不卡就保持大内存可考虑禁用关闭窗口后进程还在后台占用应用需要驻留后台更新、下载、推送在应用设置里关闭后台运行或直接禁用启动项安全日志/事件查看器文件超大审核策略开启过多安全日志膨胀事件查看器清空日志组策略关闭不必要审核Edge标签页没开多少但进程数量爆炸扩展、睡眠标签页设置不合理禁用无关扩展、开启睡眠标签页、关闭启动增强开机1天内内存爬升到90%但无明显进程驱动或系统服务泄漏RAMMap查内核池更新驱动、清理DriverStore、逐项禁用可疑服务7. 最后再分享一点实际心得Windows内存占用高并不等于电脑变垃圾了很多时候是系统把“缓存”和“可用资源”做了重新分配这种假占用对普通用户来说很难分辨。我的习惯做法是看到内存占用高先看“可用”和“已提交”再打开资源监视器看提交排序最后看一眼“内存压缩”数值。三步下来至少能排除掉80%的“看起来吓人其实没事”的情况。真正的隐藏故障往往出在驱动和系统组件层面。这类问题没有银弹只能靠工具一点点拆。RAMMap别急着删掉留着当体检工具隔一个月看一次哪天发现非分页池异常膨胀你就能在电脑卡死之前提前动手。排查完之后记得把页面文件和内存压缩的顺手设置调好很多时候细节就赢在这些地方。
返回列表