Antimalware Service Executable (MsMpEng.exe) CPU al 100% su Windows Server 2019: cause, fix e best practice

Su Windows Server 2019 può capitare che MsMpEng.exe (Antimalware Service Executable) mantenga la CPU vicina al 100%, degradando le prestazioni. In questa guida pratica trovi cause, check rapidi e soluzioni operative per ridurre il carico senza compromettere la sicurezza.

Indice

Sintomi e contesto

  • Utilizzo CPU costantemente elevato da MsMpEng.exe o picchi durante finestre ricorrenti.
  • Server poco reattivo, latenze I/O alte, code thread in attesa su disco.
  • Task “Windows Defender Scheduled Scan” che parte in orari non previsti o con priorità alta.
  • Applicazioni server (database, backup, hypervisor, file server) che generano molte aperture/scritture su file di grandi dimensioni.

Perché MsMpEng.exe può consumare così tanta CPU

Microsoft Defender Antivirus monitora in tempo reale le operazioni sui file e pianifica scansioni complete/rapide. Su un server:

  • Repository voluminosi e “mutabili” (backup, database, log rotanti, VM) vengono rivalutati spesso, moltiplicando il lavoro del motore.
  • Scansioni pianificate possono partire con priorità elevata (“Esegui con i privilegi più elevati”) o in condizioni che risultano sempre vere in ambiente server.
  • Catch‑up scans recuperano scansioni saltate dopo riavvii o finestre di manutenzione, innescando full scan nel momento peggiore.
  • Conflitti con altri agent (backup, DLP, altri AV) che usano driver di filtro file, causando scansioni “doppie”.
  • Definizioni/engine corrotti o incompleti, che portano a loop di scanning su certi file.

Diagnosi rapida: percorso decisionale

  1. Conferma il colpevole: in Task Manager/Resource Monitor verifica il processo MsMpEng.exe e quali file tocca più spesso.
  2. Stato Defender: Get-MpComputerStatus | Select AMServiceEnabled,AntispywareEnabled,RealTimeProtectionEnabled,AntivirusEnabled,FullScanAge,QuickScanAge
  3. Controlla il Task pianificato di Defender e la sua priorità.
  4. Isola software terzi con un Clean Boot per capire se un agent scatena il problema.
  5. Esegui una scansione completa (per escludere malware reale), poi valuta esclusioni mirate.
  6. Regola CPU throttle delle scansioni e ripianifica fuori orario.
  7. Aggiorna/ ripara Defender e Windows.
  8. Solo per test: disattiva temporaneamente la protezione in tempo reale; come ultima risorsa valuta rimozione/alternativa AV gestita.

Soluzioni proposte e perché funzionano

PassoCosa farePerché può aiutareNote di sicurezza
Avvio pulito (Clean Boot)msconfigServizi → “Nascondi tutti i servizi Microsoft” → Disabilita tutto; scheda Avvio → apri Gestione Attività e disabilita programmi non essenziali; riavvia.Identifica software di terze parti che genera I/O o trigger su cui Defender reagisce.Non disattiva Defender né altri servizi Microsoft.
Modificare attività pianificate di Defendertaskschd.mscTask Scheduler Library ▸ Microsoft ▸ Windows ▸ Windows DefenderWindows Defender Scheduled Scan: scheda General togli “Run with highest privileges”; scheda Conditions deseleziona le opzioni non utili su server (alimentazione, idle, ecc.).Evita picchi e scansioni che partono “al massimo” o in condizioni sempre vere.La protezione in tempo reale resta attiva.
Scansione manuale + esclusioni mirateEsegui una full scan per sicurezza. Poi aggiungi esclusioni su cartelle/processi/estensioni ad alto I/O (database, backup, VM). Esempi e comandi più sotto.Riduci al minimo la rivalutazione di file enormi o costantemente in uso.Non escludere cartelle di sistema o eseguibili non verificati.
Disabilitare temporaneamente la protezione in tempo reale (solo test)PowerShell (admin): Set‑MpPreference -DisableRealtimeMonitoring $true. Ricorda di riattivare: $false.Conferma se l’anomalia dipende davvero da Defender.Rischioso: il server resta scoperto fino a riattivazione.
Rimozione/alternativa AV (estremo)Valuta AV di terze parti gestito centralmente (Defender va in modalità passiva se un AV compatibile è presente). Per rimuovere feature: Get-WindowsFeature defender Uninstall-WindowsFeature -Name Windows-Defender-Features -RestartElimina il servizio che consuma CPU (se la causa è il motore Defender).Procedi solo se già previsto un AV alternativo e la conformità lo consente.

Dettagli operativi passo per passo

Verifica e ottimizza il task di scansione

  1. Apri Task Scheduler: taskschd.mscMicrosoft ▸ Windows ▸ Windows Defender.
  2. Apri Windows Defender Scheduled Scan:
    • Scheda General: togli “Run with highest privileges”.
    • Scheda Triggers: imposta un orario fuori picco (es. notte) e attiva “Delay task up to” per spalmare il carico.
    • Scheda Conditions: disabilita condizioni non sensate su un server (Idle/AC power) che potrebbero bloccare o far ripartire scansioni.
    • Scheda Settings: abilita “Stop the task if it runs longer than” con una soglia ragionevole; attiva “If the running task does not end when requested, force it to stop”.
  3. Da PowerShell, controlla lo stato dell’ultimo run: $t = Get-ScheduledTask -TaskName "Windows Defender Scheduled Scan" -TaskPath "\Microsoft\Windows\Windows Defender\" Get-ScheduledTaskInfo $t | Select TaskName,LastRunTime,LastTaskResult,NextRunTime

Imposta il tipo di scansione pianificata

Per ridurre il carico, pianifica Quick Scan anziché Full Scan (riservando la full a finestre di manutenzione):

# 1 = Quick, 2 = Full
Set-MpPreference -ScanParameters 1
Giorno e ora delle scansioni (esempio: domenica 02:00)
Set-MpPreference -ScanScheduleDay 0
Set-MpPreference -ScanScheduleTime 120

Limita la CPU durante le scansioni

Definisci un tetto massimo di CPU per le scansioni (non influenza la protezione in tempo reale):

# Valore 5–100 (percentuale media desiderata durante le scansioni)
Set-MpPreference -ScanAvgCPULoadFactor 20

In alternativa via Criteri di Gruppo: Computer Configuration ▸ Administrative Templates ▸ Windows Components ▸ Microsoft Defender Antivirus ▸ Scan ▸ Specify the maximum percentage of CPU usage during a scan.

Esclusioni mirate: approccio sicuro

Prima crea un’istantanea dei pattern che generano I/O:

# Individua file toccati più spesso da MsMpEng.exe (richiede Sysinternals Procmon durante una finestra di test)
In alternativa, consulta i log dell'applicazione che soffre (DB/backup) per percorsi intensivi.

Quindi applica esclusioni puntuali (cartelle/processi/estensioni), privilegiando directory di dati e file temporanei. Esempi:

# Cartelle di dati
Add-MpPreference -ExclusionPath "D:\SQLData","D:\SQLLogs","E:\Backup"
Add-MpPreference -ExclusionPath "D:\VMs","D:\HyperV\Virtual Hard Disks"

Processi dell’applicazione (riduce scansione su I/O generati da questi)

Add-MpPreference -ExclusionProcess "sqlservr.exe","BackupExec.exe","vmms.exe","vmwp.exe"

Estensioni molto voluminose/mutabili

Add-MpPreference -ExclusionExtension "mdf","ldf","bak","vhdx","iso","log"

Importante: verifica le linee guida del tuo prodotto (SQL Server, hypervisor, backup) e non escludere cartelle di sistema (C:\Windows, C:\Program Files) se non esplicitamente raccomandato dal vendor. Evita esclusioni “a tappeto” sull’intera unità.

Aggiorna Defender e Windows

Definizioni ed engine recenti migliorano prestazioni e rilevazioni:

# Aggiornamento firme/engine
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate

Verifica stato aggiornamenti

Get-MpComputerStatus | Select AntispywareSignatureLastUpdated,AntivirusSignatureLastUpdated,EngineVersion

Riparazione componenti Windows in caso di corruzione

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

Verifica log ed eventi

  • Event ViewerApplications and Services Logs ▸ Microsoft ▸ Windows ▸ Windows Defender ▸ Operational: controlla errori di engine, time‑out, file problematici ricorrenti.
  • Registro Applicazione dell’app che soffre (SQL/backup/hypervisor) per individuare percorsi intensivi.
  • Driver di filtro potenzialmente in conflitto: fltmc filters Se vedi più filtri di sicurezza/backup, valuta di escludere i reciproci percorsi secondo le best practice dei vendor.

Disattivazione temporanea (per test)

Per isolare la causa, disattiva momentaneamente la protezione in tempo reale:

Set-MpPreference -DisableRealtimeMonitoring $true
Dopo il test:
Set-MpPreference -DisableRealtimeMonitoring $false

Esegui questa prova solo in finestra di manutenzione su server isolati, verificando che non rimangano scoperti.

Rimozione o modalità passiva

Se adotti un antivirus alternativo, Defender può porsi in modalità passiva automaticamente. Per disinstallare le feature (estremo):

Get-WindowsFeature defender
Uninstall-WindowsFeature -Name Windows-Defender-Features -Restart

Verifica i requisiti di conformità e assicurati che l’AV alternativo sia già operativo prima del riavvio.

Ottimizzare pianificazione e manutenzione

  • Finestre di manutenzione: concentra full scan e aggiornamenti in slot notturni o di bassa attività.
  • Catch‑up scans: tramite GPO valuta “Disable catch‑up quick/full scans” se le finestre vengono spesso bucate.
  • Randomizzazione: su farm/cluster, sfasare i trigger per evitare picchi simultanei.

Metriche da monitorare per validare il miglioramento

Usa Performance Monitor per raccogliere prima/dopo:

  • Process ▸ % Processor Time su MsMpEng.
  • LogicalDisk ▸ Avg. Disk sec/Read, Avg. Disk sec/Write su volumi dati.
  • System ▸ Processor Queue Length e Memory ▸ Available MBytes.
  • Process ▸ IO Read/Write Bytes/sec su processi applicativi e MsMpEng.exe.

Confronta i grafici su pari fascia oraria e carico.

Modelli di esclusione per ruoli server (esempi)

RuoloPercorsi/estensioni tipicheProcessi da valutareNote
SQL ServerD:\SQLData, D:\SQLLogs, estensioni mdf, ldf, baksqlservr.exePreferire esclusione dei dati, non dell’area binari.
File serverCartelle di condivisione ad alto churn (log, build, artefatti)Valuta esclusioni granulari per aree temporanee/cache.
Hyper‑VD:\HyperV\Virtual Hard Disks, estensioni vhdx, avhdxvmms.exe, vmwp.exeEvitare di escludere C:\Windows; concentrarsi su storage VM.
BackupRepository \Backup, estensioni bak, zip, isoProcesso dell’agente (es. BackupExec.exe)Evitare scansioni doppie da AV + motore del backup.
DC/FSC:\Windows\SYSVOL (valutare con prudenza), cartelle temporanee di replicaSeguire le raccomandazioni del vendor; su DC le esclusioni vanno ponderate con attenzione.

Consiglio: preferisci esclusioni di processo (meno rischiose) quando possibile, perché limitano l’effetto ai soli I/O generati da quell’applicazione.

Ulteriori accorgimenti utili

  • Aggiorna Defender e Windows Update: patch nuove ottimizzano engine e firme.
  • Pianifica scansioni fuori orario: tramite GPO Microsoft Defender Antivirus ▸ Scan definisci giorno/ora.
  • Ripara componenti: se i log mostrano errori, usa sfc e DISM come sopra.
  • Evita la sovrapposizione con altri agent: coordina esclusioni reciproche (backup/EDR/AV).
  • Non cambiare la priorità di MsMpEng.exe da Task Manager: è un processo protetto, la gestione corretta passa da GPO/pianificazione.

FAQ pratiche

Posso “limitare” MsMpEng a pochi core? L’affinità CPU sul processo di Defender non è una soluzione ufficiale e può essere ignorata; meglio usare il CPU throttle di scansione e una pianificazione corretta.

Ha senso escludere l’intera unità dati? No: è rischioso. Lavora per sotto‑cartelle, processi ed estensioni specifiche. Verifica sempre il rischio residuo con il tuo team sicurezza.

Le esclusioni disattivano la protezione in tempo reale? Solo sui percorsi/processi estromessi. Mantieni le esclusioni il più mirate possibile.

Una Quick Scan è sufficiente su server? Per il day‑by‑day sì; programma Full Scan solo in finestre di bassa attività o manutenzione.

Checklist operativa riassuntiva

  1. Conferma che MsMpEng.exe è la causa e mappa i percorsi più attivi.
  2. Rivedi Windows Defender Scheduled Scan: togli “Run with highest privileges”, ripianifica, imposta limiti.
  3. Imposta -ScanAvgCPULoadFactor a un valore conservativo (es. 20).
  4. Esegui una Full Scan, quindi crea esclusioni mirate (path/process/extension) per dati voluminosi.
  5. Aggiorna firme/engine, ripara con sfc/DISM se necessario.
  6. Valuta conflitti con altri agent (driver di filtro) e coordina esclusioni reciproche.
  7. Monitora con PerfMon i contatori chiave e confronta prima/dopo.
  8. Solo in test: disabilita temporaneamente la protezione in tempo reale per isolare la causa.
  9. Se irreversibile e previsto dalla policy: adotta AV alternativo e porta Defender in passivo o rimuovi la feature.

Conclusioni

Il consumo elevato di CPU da Antimalware Service Executable su Windows Server 2019 si risolve quasi sempre con interventi a basso impatto: correzione della pianificazione, CPU throttle delle scansioni, aggiornamenti e esclusioni mirate costruite sui percorsi ad alto churn. Le misure drastiche (disattivazione prolungata o rimozione di Defender) sono l’ultima ratio e vanno adottate solo quando esiste un’alternativa di sicurezza gestita e conforme. Dopo ogni modifica, misura l’effetto: solo il monitoraggio ti conferma di aver colpito la causa primaria.


Appendice: comandi PowerShell pronti all’uso

# Stato sintetico Defender
Get-MpComputerStatus | fl AMServiceEnabled,AntivirusEnabled,RealTimeProtectionEnabled,EngineVersion,AntivirusSignatureVersion

Tipo e pianificazione scansione

Set-MpPreference -ScanParameters 1             # 1=Quick, 2=Full
Set-MpPreference -ScanScheduleDay 0            # 0=Domenica ... 6=Sabato
Set-MpPreference -ScanScheduleTime 120         # Minuti dopo mezzanotte (02:00)

Limite medio CPU per le scansioni

Set-MpPreference -ScanAvgCPULoadFactor 20

Esclusioni (esempi)

Add-MpPreference -ExclusionPath "E:\Backup","D:\SQLData","D:\HyperV\Virtual Hard Disks"
Add-MpPreference -ExclusionProcess "sqlservr.exe","BackupExec.exe","vmms.exe","vmwp.exe"
Add-MpPreference -ExclusionExtension "mdf","ldf","bak","vhdx","iso"

Disattivazione temporanea real-time (test)

Set-MpPreference -DisableRealtimeMonitoring \$true
Set-MpPreference -DisableRealtimeMonitoring \$false

Aggiornamento firme/engine

"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate

Task pianificato di Defender: stato esecuzione

\$t = Get-ScheduledTask -TaskName "Windows Defender Scheduled Scan" -TaskPath "\Microsoft\Windows\Windows Defender"
Get-ScheduledTaskInfo \$t | fl \*

Riparazione sistema in caso di corruzione

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth 

Best practice di sicurezza

  • Documenta tutte le esclusioni e sottoponile a revisione periodica.
  • Non escludere componenti di sistema o aree eseguibili salvo documentazione ufficiale.
  • Allinea le finestre di scansione con patching e job applicativi per evitare collisioni.
  • In cluster/farm, scagliona le scansioni per evitare picchi simultanei.

Con questa procedura graduata (diagnosi → pianificazione → esclusioni → limiti CPU → aggiornamento/riparazione) è possibile riportare MsMpEng.exe a un carico sostenibile senza sacrificare la postura di sicurezza del server.

Indice