Defender 的 Antimalware Service Executable 為什麼吃掉 CPU
工作管理員裡的「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,開始錄製後重複那項工作,按 Enter 停止:
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 佔用偏高嗎?
只適合範圍很小、只有可信工具寫入的資料夾,例如建置輸出目錄。微軟提醒排除項目會降低保護。下載、桌面和整顆磁碟都不要排除。