[廚餘回收] 在半夜偷偷吃掉 CPU 資源的暗夜怪客 - MsMpEng.exe(Windows Defender)

前些日子開了一台新的 SQL Server,最近從監控當中發現凌晨 02:10 ~ 02:30 之間 CPU 被拉高,日復一日都是相同的時間點。

看起來吃了不少 CPU 資源,由於這段時間嚴格來講並不算是服務的離峰時間,還是希望將珍貴的 CPU 資源留給服務,所以必須查出來到底是誰吃掉了 CPU 的資源?

由於是 SQL Server 的機器,所以先懷疑是有什麼 SQL 語句在執行,因此我先用 XE Profiler 在半夜兩點的時候啟動,去側錄 SQL Server 的事件,跑半小時後再關掉,半夜兩點起床實在痛苦,如果有知道如何排程啟動及關閉 XE Profiler 的朋友,還希望能告知,感謝。

側錄的結果是找不到什麼相當消耗 CPU 資源的 SQL Server 事件出現,這時候轉而去調查是不是有其他程序在半夜兩點十分左右被執行,由於我實在不想再在半夜兩點起床了,於是就參考黑大的這篇文章 - 快速列出 Windows 執行中程式 CPU%、記憶體用量與執行身分,撰寫程式列出在半夜 02:10 ~ 02:30 有哪些程式正在執行? 果真被我逮到了。

MsMpEng.exe 是什麼? 其實它就是 Windows Defender,而為什麼它會在半夜兩點十分左右吃那麼多 CPU 資源呢? 因為有一個 Windows Defender Scheduled Scan 的工作排程叫它執行掃描的工作,時間就安排在半夜兩點十三分。

此處我們有兩個選擇,第一我們可以將掃描的工作調整到真正的離峰時段,或是直接將掃描的工作排程停用,怎麼停用我就不贅述了,第二我們如果對我們的資安環境有信心,可以不需要 Windows Defender,那我們可以選擇把它停掉,底下就說明停掉 Windows Defender 的方法。

首先我們在執行視窗中輸入 gpedit.msc 打開本機群組原則編輯器

接著在「電腦設定」->「系統管理範本」->「Windows 元件」->「Windows Defender 防毒軟體」底下,可以看到關閉 Windows Defender 防毒軟體

點擊兩下打開設定畫面,將它設為已啟用,Windows Defender 就馬上停掉了。

參考資料