Windows Server 2019 : résoudre « Antimalware Service Executable » (MsMpEng.exe) à 100 % CPU sans affaiblir la sécurité

Sur Windows Server 2019, MsMpEng.exe (Microsoft Defender / Antimalware Service Executable) peut saturer le CPU et plomber la production. Voici un guide concret pour faire redescendre l’utilisation sans dégrader la posture de sécurité, avec scripts prêts à l’emploi.

Sommaire

Vue d’ensemble

Un pic CPU à ~100 % par Antimalware Service Executable a presque toujours une cause identifiable : analyse complète déclenchée au mauvais moment, dépôts massifs scannés en boucle, définitions obsolètes, conflits avec un autre EDR, ou exclusions inadaptées. La bonne approche consiste à mesurer, planifier, limiter l’impact et documenter clairement chaque changement.

Plan d’action recommandé

Vérifications rapides

  • Confirmer qu’aucune analyse complète n’est en cours (les serveurs de fichiers/SQL peuvent durer des heures).
  • Mettre à jour Windows, le moteur Defender et les signatures.
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate

Si le service semble bloqué, redémarrez-le proprement :

Restart-Service WinDefend

Vérifiez l’état général de Defender :

Get-MpComputerStatus | Select AMServiceEnabled,AntivirusEnabled,RealTimeProtectionEnabled,AntivirusSignatureVersion,EngineVersion

Limiter l’impact CPU des analyses

Définissez un plafond CPU pour les analyses (GPO ou PowerShell). Cette limite réduit l’empreinte lors des analyses planifiées ou déclenchées à la demande, ce qui est souvent le levier principal pour stabiliser la production.

  • Stratégie de groupe (GPO) : Configuration ordinateur → Modèles d’administration → Composants Windows → Microsoft Defender Antivirus → AnalyseConfigurer le pourcentage maximal d’utilisation du processeur pendant une analyse. Fixez 20–40 % selon la charge.
  • PowerShell :
Set-MpPreference -ScanAvgCPULoadFactor 30   # 0–100

Planifiez les analyses en heures creuses et réduisez leur fréquence (hebdomadaire suffit sur la plupart des serveurs si la protection en temps réel reste active).

Exclusions ciblées et conformes aux rôles

Les charges serveur (SQL Server, Hyper‑V, DFSR, serveurs de fichiers, déduplication, sauvegardes) génèrent beaucoup d’I/O. Ajoutez uniquement des exclusions minimales et précises (chemins ou processus), jamais des volumes entiers ni C:\Windows. Exemples à adapter :

# SQL Server
Add-MpPreference -ExclusionProcess "sqlservr.exe"
Add-MpPreference -ExclusionPath "D:\SQLData","D:\SQLLogs","D:\TempDB"

# Hyper‑V (adapter les dossiers de stockage des VM)

Add-MpPreference -ExclusionProcess "vmms.exe","vmwp.exe"
Add-MpPreference -ExclusionPath "D:\HyperV\VMs"

# Sauvegardes / dépôts volumineux

Add-MpPreference -ExclusionPath "E:\Backups","E:\DedupeStore" 

Astuce : privilégiez ExclusionProcess pour les services connus et ExclusionPath pour les dépôts de données. Documentez toutes les exclusions (qui, quoi, pourquoi).

Tableau d’exclusions par rôle (exemples)

RôleProcessus (ExclusionProcess)Chemins typiques (ExclusionPath)Notes
SQL Serversqlservr.exe, évent. fdlauncher.exeDossiers Data, Logs, TempDBÉvitez d’exclure toute la lettre ; ciblez les répertoires.
Hyper‑Vvmms.exe, vmwp.exeDépôts VHDX/VSV, ProgramData\Microsoft\Windows\Hyper‑V si nécessaireNe scannez pas les VHDX en production ; préférez l’analyse dans la VM.
DFSR / Fichiersdfsr.exe selon usageDossiers volumineux, DfsrPrivate spécifiques selon architectureLimiter le scan des zones temporaires et de staging si surcharge.
DéduplicationDépôts dédupliqués et magasins de chunksSuivre les bonnes pratiques du composant pour éviter les boucles d’accès.
SauvegardeProcessus de l’éditeur (ex. veeamagent.exe, etc.)Répertoires de backup, répos. immuablesScanner à l’ingestion ou à la restauration plutôt que le dépôt entier.

Ajuster les tâches planifiées Defender

Rendez-vous dans Planificateur de tâches → Microsoft → Windows → Windows Defender et adaptez :

  • Windows Defender Scheduled Scan : créneau hors‑prod (nuit/week‑end).
  • Limiter la durée : onglet Paramètres → arrêter si > X h.
  • Éviter les collisions : ne pas lancer en même temps que sauvegardes, réplications, indexation, ETL, etc.

Le fait de désélever « Exécuter avec les plus hauts privilèges » n’a en général aucun impact sur l’usage CPU ; l’essentiel est le créneau, la durée et le plafond CPU.

Inventoriez rapidement les tâches liées à Defender :

Get-ScheduledTask -TaskPath "\Microsoft\Windows\Windows Defender\" |
  Select TaskName,State,LastRunTime,NextRunTime

Tâches Defender côté serveur : recommandations

TâcheButConseil de configuration
Windows Defender Scheduled ScanAnalyse planifiéePlanifier hors‑prod, durée max, aligner avec -ScanAvgCPULoadFactor
Windows Defender Cache MaintenanceEntretien du cacheLaisser activé, pas de gêne notable
Windows Defender VerificationVérification d’intégritéLaisser activé
Windows Defender CleanupNettoyageLaisser activé

Diagnostiquer la cause exacte

  • Observateur d’événements : Applications and Services Logs → Microsoft → Windows → Windows Defender → Operational. Repérez les fichiers/répertoires scannés de façon répétée.
  • Resource Monitor/Process Monitor : filtrez sur MsMpEng.exe pour voir quels chemins déclenchent l’I/O et les scans.
  • PerfMon : surveillez Process → % Processor Time pour MsMpEng, et les compteurs d’I/O disque correspondants.

Commandes utiles :

# Fichiers détectés récemment
Get-MpThreatDetection | Sort-Object -Property InitialDetectionTime -Descending | Select -First 20

# Exclusions en place

Get-MpPreference | Select-Object -ExpandProperty ExclusionPath
Get-MpPreference | Select-Object -ExpandProperty ExclusionProcess

# Processus MsMpEng et utilisation CPU instantanée

Get-Process MsMpEng | Select-Object CPU,Id,Path 

Assainir la plateforme Defender

En cas de suspicion de corruption (moteur/def défaits), réinitialisez puis mettez à jour :

# Réinitialiser les signatures puis remettre à jour
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate

# Réparer l’image si nécessaire

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

Tests temporaires (diagnostic uniquement)

Pour confirmer que Defender est bien la source, une désactivation très courte peut être tolérée en environnement contrôlé :

Set-MpPreference -DisableRealtimeMonitoring $true
# ...tests ciblés...
Set-MpPreference -DisableRealtimeMonitoring $false

À utiliser quelques minutes, hors exposition, puis revenir immédiatement à l’état sécurisé.

Cas particuliers

  • Autre EDR/antivirus : placez Defender en mode passif si l’outil tiers assure la protection, pour éviter la double analyse.
  • Hôtes Hyper‑V : préférez l’analyse dans la VM ; ne scannez pas les VHDX à chaud côté hôte.
  • Serveurs de fichiers massifs : ciblez les exclusions sur les répertoires de staging/cache et planifiez la nuit.

Procédure guidée pas à pas

  1. Stabiliser : mettez à jour signatures et redémarrez le service si besoin.
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate
Restart-Service WinDefend
  1. Mesurer : vérifiez l’état et l’activité récentes.
Get-MpComputerStatus | fl
Get-MpThreatDetection | Select InitialDetectionTime,Resources,ActionSuccess
  1. Limiter immédiatement : imposez un plafond CPU.
Set-MpPreference -ScanAvgCPULoadFactor 30
  1. Planifier : déplacez les analyses régulières hors‑prod et évitez les collisions avec les sauvegardes/ETL.
  2. Exclure finement : ajoutez des exclusions ciblées liées au rôle du serveur.
  3. Surveiller : consultez l’Event Log Defender et corrigez les répertoires qui ressortent.

Paramètres clés à connaître

ParamètreOù le réglerCommande PowerShellImpact attendu
Plafond CPU d’analyseGPO Defender → AnalyseSet-MpPreference -ScanAvgCPULoadFactor 20..40Diminue l’empreinte CPU pendant les analyses planifiées/manuelles.
Exclusions de processusGPO ou localAdd-MpPreference -ExclusionProcess "sqlservr.exe"Évite le rescannage de processus critiques connus.
Exclusions de cheminsGPO ou localAdd-MpPreference -ExclusionPath "D:\SQLData"Élimine les dépôts bruyants tout en restant précis.
Signature updateTâches + Windows UpdateMpCmdRun.exe -SignatureUpdateRéduit les boucles de détection et faux positifs.

Bonnes pratiques et garde‑fous

  • Pas d’exclusions larges : jamais un lecteur complet ni C:\Windows.
  • Pas de désactivation durable : uniquement à des fins de diagnostic, quelques minutes.
  • Documentez la raison de chaque exclusion (référence ticket, périmètre, date, propriétaire).
  • Coordonnez avec les équipes DBA/virtualisation/sauvegarde pour caler les créneaux.
  • Réévaluez trimestriellement les exclusions (beaucoup deviennent obsolètes).

Scripts prêts à l’emploi

Appliquer rapidement un plafond CPU et une planification sûre

# Plafond CPU recommandé (ajuster selon le serveur)
Set-MpPreference -ScanAvgCPULoadFactor 30

# Vérifier/forcer la protection en temps réel

Set-MpPreference -DisableRealtimeMonitoring \$false

# Lister et vérifier les tâches planifiées Defender

Get-ScheduledTask -TaskPath "\Microsoft\Windows\Windows Defender" |
Select TaskName,State,LastRunTime,NextRunTime | Format-Table -Auto 

Définir des exclusions guidées par les rôles installés

# Exemple : détecter rapidement Hyper-V/FS/SQL et proposer des exclusions minimales
$features = Get-WindowsFeature | Where-Object {$_.InstallState -eq "Installed"} | Select -Expand Name

if (\$features -contains "Hyper-V") {
Add-MpPreference -ExclusionProcess "vmms.exe","vmwp.exe"
Add-MpPreference -ExclusionPath "D:\HyperV\VMs"
}

if (\$features -contains "FS-FileServer") {

# Adapter aux dépôts volumineux réels

Add-MpPreference -ExclusionPath "E:\Shares\Staging","E:\Shares\Archive"
}

# SQL : à activer si serveur SQL détecté (exemple)

\$maybeSql = Get-Process -Name sqlservr -ErrorAction SilentlyContinue
if (\$maybeSql) {
Add-MpPreference -ExclusionProcess "sqlservr.exe"
Add-MpPreference -ExclusionPath "D:\SQLData","D:\SQLLogs","D:\TempDB"
}

# Afficher le récapitulatif

Get-MpPreference | Select-Object -ExpandProperty ExclusionPath
Get-MpPreference | Select-Object -ExpandProperty ExclusionProcess 

Diagnostic avancé

Si l’utilisation reste élevée :

  1. Profiler l’I/O de MsMpEng.exe via Process Monitor (filtre sur le processus).
  2. Trier les répertoires les plus scannés dans l’Event Log Defender et vérifier s’ils sont déjà exclus.
  3. Inspecter les dépôts d’archives (ZIP, ISO, VHDX) & volumes immuables : évitez de les scanner continuellement côté serveur.
  4. Comparer la fenêtre d’analyse avec les jobs lourds (sauvegarde, réplication, ETL, indexation). Décalez si besoin.

Questions fréquentes

Le plafond CPU affecte‑t‑il la protection en temps réel ?
Il agit principalement lors des analyses planifiées/manuelles. La protection en temps réel continue de surveiller les accès, avec un impact généralement faible une fois les exclusions et la planification en place.

Faut‑il désactiver l’analyse des fichiers réseau ?
Non en règle générale. Ce serait un compromis de sécurité. Préférez des exclusions ciblées et la planification.

Peut‑on désinstaller Defender sur un serveur protégé par un EDR tiers ?
Non recommandé. Utilisez plutôt le mode passif ou laissez l’EDR orchestrer la cohabitation.

Erreurs à éviter

  • Exclure un lecteur entier « par facilité ».
  • Empiler des exclusions redondantes non documentées.
  • Planifier l’analyse pendant la sauvegarde ou la réplication.
  • Ignorer les journaux Defender qui pointent vers un répertoire bruyant.
  • Oublier de revenir à l’état sécurisé après un test de désactivation.

Checklist de déploiement rapide

ActionCommande/RéférenceValider
Mise à jour signaturesMpCmdRun.exe -SignatureUpdateGet-MpComputerStatus → versions à jour
Plafond CPU appliquéSet-MpPreference -ScanAvgCPULoadFactor 30Observation CPU stable pendant analyse
Planification hors‑prodPlanificateur → Windows DefenderPas de collision avec backups/ETL
Exclusions minimales poséesAdd-MpPreference -ExclusionPath/-ExclusionProcessAucune exclusion large, doc à jour
Journal Defender surveilléEvent Log → Defender OperationalBoucles identifiées/traitées

Commandes utiles de remise en état

# Réinitialiser les définitions, mettre à jour et réparer l’OS si nécessaire
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow

Résumé opérationnel

  • Commencez par mises à jour + plafond CPU (GPO/PowerShell) + planification hors‑prod.
  • Ajoutez des exclusions ciblées alignées sur le rôle du serveur (SQL, Hyper‑V, DFSR, sauvegardes).
  • Surveillez les journaux Defender pour repérer les répertoires/processus les plus coûteux.
  • N’utilisez la désactivation (ou la désinstallation) que pour tester ou si un EDR tiers prend formellement le relais.

Ces mesures abaissent nettement l’utilisation CPU sans compromettre la sécurité, et rendent la charge prévisible grâce à une planification adaptée et à des exclusions bien ciblées.


Annexes : références de commandes

# Mettre à jour les signatures
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate

# Redémarrer le service Defender

Restart-Service WinDefend

# Fixer le plafond CPU des analyses

Set-MpPreference -ScanAvgCPULoadFactor 30   # 0–100

# Exclusions : adapter à votre environnement

Add-MpPreference -ExclusionProcess "sqlservr.exe"
Add-MpPreference -ExclusionPath "D:\SQLData","D:\SQLLogs","D:\TempDB"
Add-MpPreference -ExclusionProcess "vmms.exe","vmwp.exe"
Add-MpPreference -ExclusionPath "D:\HyperV\VMs"
Add-MpPreference -ExclusionPath "E:\Backups","E:\DedupeStore"

# Journal et statut

Get-MpComputerStatus | fl
Get-MpPreference | fl *Excl*
Get-MpThreatDetection | Sort-Object InitialDetectionTime -Descending | Select -First 20

# Remise en état plateforme Defender

"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow

# Test (diagnostic court)

Set-MpPreference -DisableRealtimeMonitoring \$true

# ... effectuer le test ...

Set-MpPreference -DisableRealtimeMonitoring \$false 

En appliquant ce plan par étapes — plafond CPU, planification, exclusions fines, supervision — vous transformez une saturation imprévisible de MsMpEng.exe en une charge maîtrisée et compatible production.

Sommaire