Antimalware Service Executable 占用 CPU 高,Defender 在做什么
任务管理器里的“Antimalware Service Executable”就是 Windows 自带的 Microsoft Defender 防病毒,进程文件是 MsMpEng.exe,它占用 CPU 高,大多数时候是在扫描,可能是计划扫描,可能是刚装完新的安全情报后补的一次扫描,也可能是别的程序正在大量打开文件,它跟着做实时检查。先分清是哪一种再动手,几种情况的处理方法各不相同,没有一种需要把 Defender 永久关掉。
它到底在做什么
微软排查 Defender 性能问题的文章直接点了名,Anti-malware Service Executable、MsMpEng.exe、Microsoft Defender 防病毒说的是同一个东西,它的工作大致分三类:
| 工作来源 | 什么时候发生 | 看起来是什么样 |
|---|---|---|
| 实时保护 | 文件被打开、关闭或启动时 | CPU 跟着别的任务走,编译、安装程序、解压、复制大量小文件 |
| 计划扫描 | 按计划运行,默认要等电脑空闲 | 人一离开就开始,回来时可能还没扫完 |
| 安全情报更新后的扫描 | 新的病毒库装好以后 | 像是在计划之外又扫了一次 |
平时最常遇到的是实时保护,同一篇文章列了几种特别费 CPU 的情况,没有数字签名的 .exe、.dll 被反复启动,把 HTA、CHM 这类复杂格式当数据库用,混淆过的脚本,还有 .iso、.vhdx 这种大文件放在会同步到网络位置或 OneDrive 的个人文件夹里。编译一个项目要写出几千个小文件,就是最日常的例子,编译器每写一个文件,Defender 就要看一个。
先看,不改设置
按 Ctrl + Shift + Esc 打开任务管理器,按 CPU 排序,同时记下这一刻还有谁在忙,如果它的占用跟着编译、安装或一次大复制一起涨落,那是在实时检查这些文件,如果别的程序都闲着只有它在忙,多半是在做一次扫描。过几分钟再看一眼,扫完自己降下来是正常现象,不算故障。
再从开始菜单打开 Windows 安全中心,进入病毒和威胁防护,微软的 Windows 安全中心说明讲了这里的扫描选项,有快速扫描、完全扫描、自定义扫描和 Microsoft Defender 脱机版扫描,还有保护历史记录。保护历史记录值得先看一眼,如果 Defender 确实发现了东西正在处理,CPU 高就有了原因,该处理的是记录里列出的那一项。
想知道到底是哪些文件最费时间,Defender 自带一个性能分析工具,微软的说明讲得很清楚,先开始录制,重复一遍那个慢的操作,它会按扫描耗时列出排在前面的文件、路径、扩展名和进程。以管理员身份打开 PowerShell,开始录制后重复那项工作,按回车停止:
New-MpPerformanceRecording -RecordTo C:\Temp\defender.etl
Get-MpPerformanceReport -Path C:\Temp\defender.etl -TopFiles 10 -TopProcesses 10
路径只是举例,换成一个存在的文件夹就行,报告只读数据,不改任何设置。排在前面的如果是自己项目的构建输出或包管理器缓存,实时扫描的开销就找到了,如果是一个刚下载的压缩包或者认不出来的程序,那就该让它继续扫。
扫描本身,默认用快速扫描
微软的扫描说明推荐计划扫描用快速扫描,它检查恶意软件会随系统启动的那些位置,比如注册表键和启动文件夹,再加上一直开着的实时保护,就是微软推荐的覆盖方式。完全扫描要把所有固定磁盘读一遍,盘大的话要几个小时甚至几天,微软一般不建议把它设成计划任务,如果是自己手动点了完全扫描,CPU 会一直忙到它扫完。
同一份说明还提到,计划扫描开始前 15 分钟 Defender 会先检查更新,排查文章也说明安全情报更新后默认会补一次扫描,所以有时会在一个自己没设过的时间看到它在扫。
想把计划扫描挪出工作时间,可以照微软的任务计划程序步骤,打开任务计划程序库 › Microsoft › Windows › Windows Defender,双击 Windows Defender Scheduled Scan,在触发器里新建一个时间,选一个电脑开着但自己不用的时候,比如午饭时间。挪时间不会少扫一次,只是换个时候付出这份开销。
开发目录,先考虑 Dev Drive,再考虑排除项
如果开销来自开发工作,微软在 Windows 11 上给的方案是 Dev Drive,它是一个单独的 ReFS 卷,至少 50 GB,专门放代码仓库、包缓存和构建输出。受信任的 Dev Drive 上 Defender 会以性能模式运行,微软把它描述成比排除文件夹更安全的替代做法,文件照样会扫,只是对编译的影响小一些。在管理员命令行里可以查它的状态:
fsutil devdrv query D:
把 D: 换成自己的 Dev Drive 盘符。C 盘不能做成 Dev Drive,已有的卷要转换只能重新格式化,微软还建议 Visual Studio、SDK 这类开发工具留在 C 盘。把缓存挪过去比改一个设置的改动大,Dev Drive 页面列出了 npm、NuGet、pip、Cargo、Maven、Gradle 各自要设的环境变量,哪些缓存其实可以直接清,可以看 Windows 开发缓存。
排除项,只给自己信得过的文件夹,并且清楚代价
排除项会让 Defender 不再扫描那个文件、文件夹、文件类型或进程,在 Windows 安全中心里,微软的步骤是病毒和威胁防护 › 管理设置 › 添加或删除排除项,同一页也写明了排除的内容可能让设备和数据暴露在风险里,微软的排除项参考更直接,通常根本不需要设排除项。
如果还是要加,范围尽量小:
- 只排除自己信得过的工具才会写入的文件夹,比如一个项目的构建输出目录,不是整块盘,也不是整个用户文件夹。
- 下载、桌面、浏览器的下载目录,以及会收到邮件、聊天和网上文件的文件夹,一律不排除,恶意软件就是从这些地方进来的。
- 进程排除会覆盖这个进程打开的所有文件,排除编译器或包管理器,等于它下载下来的东西也不扫了。
每加一项排除都是一次交换,那个文件夹省了 CPU,落进去的任何东西也都没人检查,哪天这个文件夹开始放下载来的文件,就把排除项删掉。
哪些事不要做
不要通过注册表、组策略、“精简”脚本或第三方优化工具把 Defender 永久关掉。在 Windows 安全中心里关掉实时保护本来就是临时的,微软的说明写着过一小会儿它会自己重新打开,关着的这段时间里,打开和下载的文件都不会被检查,排查文章也只建议通过故障排除模式短暂关一下,用来排除它是不是原因。
也不要在任务管理器里结束 MsMpEng.exe,不要删 Defender 文件夹里的文件,不要为了让数字降下来把 C:\ 或整个用户文件夹排除掉。如果同时装了别的安全软件,微软的文章建议把双方的进程互相加进排除项,两个扫描器检查同一批文件,本身就是 CPU 高的常见原因。
改完以后怎么确认
挪了扫描时间、把缓存搬到 Dev Drive 或加了一个小范围的排除项之后,重复同样的工作,比如同一次编译,前后对比一下,也可以再录一次性能分析,看那个文件夹有没有显示跳过原因,或者扫描耗时是不是降了。回到 Windows 安全中心的病毒和威胁防护,保护状态应该仍然是开着的。
Mole 不会改 Defender 的设置,也不会加排除项,点窗口左上角的 Mole 标记,选择运行诊断,报告会显示 Defender 实时保护是否开着,病毒库超过一周没更新时也会提示,别人动过这台电脑的安全设置以后,可以拿它看一眼。不是 Defender 的 CPU 占用,可以看 Windows CPU 占用高怎么查,磁盘一直 100% 可以看 任务管理器里磁盘 100%。
常见问题
Antimalware Service Executable 是病毒吗?
真正的这个进程是 Windows 自带的 Microsoft Defender 防病毒,文件名 MsMpEng.exe,占用高通常是在扫描,如果保护历史记录里有检测结果,处理那一项就行。
电脑闲着的时候 Antimalware Service Executable 为什么 CPU 占用高?
计划扫描默认在电脑空闲时运行,安全情报更新后也会默认补扫一次,快速扫描一般很快自己结束,完全扫描可能要几个小时。
可以禁用 Antimalware Service Executable 吗?
没有安全的办法。关掉实时保护只是临时的,Windows 会自己重新打开,用策略或脚本永久禁用会让文件没人检查,改用调整扫描时间或 Dev Drive。
加排除项能解决 Defender CPU 占用高吗?
只适合范围很小、只有可信工具写入的文件夹,比如构建输出目录。微软提醒排除项会降低保护,下载、桌面和整块盘都不要排除。