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.
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
- Conferma il colpevole: in Task Manager/Resource Monitor verifica il processo
MsMpEng.exe
e quali file tocca più spesso. - Stato Defender:
Get-MpComputerStatus | Select AMServiceEnabled,AntispywareEnabled,RealTimeProtectionEnabled,AntivirusEnabled,FullScanAge,QuickScanAge
- Controlla il Task pianificato di Defender e la sua priorità.
- Isola software terzi con un Clean Boot per capire se un agent scatena il problema.
- Esegui una scansione completa (per escludere malware reale), poi valuta esclusioni mirate.
- Regola CPU throttle delle scansioni e ripianifica fuori orario.
- Aggiorna/ ripara Defender e Windows.
- Solo per test: disattiva temporaneamente la protezione in tempo reale; come ultima risorsa valuta rimozione/alternativa AV gestita.
Soluzioni proposte e perché funzionano
Passo | Cosa fare | Perché può aiutare | Note di sicurezza |
---|---|---|---|
Avvio pulito (Clean Boot) | msconfig → Servizi → “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 Defender | taskschd.msc → Task Scheduler Library ▸ Microsoft ▸ Windows ▸ Windows Defender → Windows 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 mirate | Esegui 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 -Restart | Elimina 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
- Apri Task Scheduler:
taskschd.msc
→ Microsoft ▸ Windows ▸ Windows Defender. - 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”.
- 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 Viewer → Applications 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)
Ruolo | Percorsi/estensioni tipiche | Processi da valutare | Note |
---|---|---|---|
SQL Server | D:\SQLData , D:\SQLLogs , estensioni mdf , ldf , bak | sqlservr.exe | Preferire esclusione dei dati, non dell’area binari. |
File server | Cartelle di condivisione ad alto churn (log, build, artefatti) | — | Valuta esclusioni granulari per aree temporanee/cache. |
Hyper‑V | D:\HyperV\Virtual Hard Disks , estensioni vhdx , avhdx | vmms.exe , vmwp.exe | Evitare di escludere C:\Windows ; concentrarsi su storage VM. |
Backup | Repository \Backup , estensioni bak , zip , iso | Processo dell’agente (es. BackupExec.exe ) | Evitare scansioni doppie da AV + motore del backup. |
DC/FS | C:\Windows\SYSVOL (valutare con prudenza), cartelle temporanee di replica | — | Seguire 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
eDISM
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
- Conferma che
MsMpEng.exe
è la causa e mappa i percorsi più attivi. - Rivedi Windows Defender Scheduled Scan: togli “Run with highest privileges”, ripianifica, imposta limiti.
- Imposta
-ScanAvgCPULoadFactor
a un valore conservativo (es. 20). - Esegui una Full Scan, quindi crea esclusioni mirate (path/process/extension) per dati voluminosi.
- Aggiorna firme/engine, ripara con
sfc
/DISM
se necessario. - Valuta conflitti con altri agent (driver di filtro) e coordina esclusioni reciproche.
- Monitora con PerfMon i contatori chiave e confronta prima/dopo.
- Solo in test: disabilita temporaneamente la protezione in tempo reale per isolare la causa.
- 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.