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.
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 → Analyse → Configurer 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ôle | Processus (ExclusionProcess) | Chemins typiques (ExclusionPath) | Notes |
---|---|---|---|
SQL Server | sqlservr.exe , évent. fdlauncher.exe | Dossiers Data, Logs, TempDB | Évitez d’exclure toute la lettre ; ciblez les répertoires. |
Hyper‑V | vmms.exe , vmwp.exe | Dépôts VHDX/VSV, ProgramData\Microsoft\Windows\Hyper‑V si nécessaire | Ne scannez pas les VHDX en production ; préférez l’analyse dans la VM. |
DFSR / Fichiers | dfsr.exe selon usage | Dossiers volumineux, DfsrPrivate spécifiques selon architecture | Limiter le scan des zones temporaires et de staging si surcharge. |
Déduplication | — | Dépôts dédupliqués et magasins de chunks | Suivre les bonnes pratiques du composant pour éviter les boucles d’accès. |
Sauvegarde | Processus de l’éditeur (ex. veeamagent.exe, etc.) | Répertoires de backup, répos. immuables | Scanner à 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âche | But | Conseil de configuration |
---|---|---|
Windows Defender Scheduled Scan | Analyse planifiée | Planifier hors‑prod, durée max, aligner avec -ScanAvgCPULoadFactor |
Windows Defender Cache Maintenance | Entretien du cache | Laisser activé, pas de gêne notable |
Windows Defender Verification | Vérification d’intégrité | Laisser activé |
Windows Defender Cleanup | Nettoyage | Laisser 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
- Stabiliser : mettez à jour signatures et redémarrez le service si besoin.
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate
Restart-Service WinDefend
- Mesurer : vérifiez l’état et l’activité récentes.
Get-MpComputerStatus | fl
Get-MpThreatDetection | Select InitialDetectionTime,Resources,ActionSuccess
- Limiter immédiatement : imposez un plafond CPU.
Set-MpPreference -ScanAvgCPULoadFactor 30
- Planifier : déplacez les analyses régulières hors‑prod et évitez les collisions avec les sauvegardes/ETL.
- Exclure finement : ajoutez des exclusions ciblées liées au rôle du serveur.
- Surveiller : consultez l’Event Log Defender et corrigez les répertoires qui ressortent.
Paramètres clés à connaître
Paramètre | Où le régler | Commande PowerShell | Impact attendu |
---|---|---|---|
Plafond CPU d’analyse | GPO Defender → Analyse | Set-MpPreference -ScanAvgCPULoadFactor 20..40 | Diminue l’empreinte CPU pendant les analyses planifiées/manuelles. |
Exclusions de processus | GPO ou local | Add-MpPreference -ExclusionProcess "sqlservr.exe" | Évite le rescannage de processus critiques connus. |
Exclusions de chemins | GPO ou local | Add-MpPreference -ExclusionPath "D:\SQLData" | Élimine les dépôts bruyants tout en restant précis. |
Signature update | Tâches + Windows Update | MpCmdRun.exe -SignatureUpdate | Ré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 :
- Profiler l’I/O de
MsMpEng.exe
via Process Monitor (filtre sur le processus). - Trier les répertoires les plus scannés dans l’Event Log Defender et vérifier s’ils sont déjà exclus.
- Inspecter les dépôts d’archives (ZIP, ISO, VHDX) & volumes immuables : évitez de les scanner continuellement côté serveur.
- 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
Action | Commande/Référence | Valider |
---|---|---|
Mise à jour signatures | MpCmdRun.exe -SignatureUpdate | Get-MpComputerStatus → versions à jour |
Plafond CPU appliqué | Set-MpPreference -ScanAvgCPULoadFactor 30 | Observation CPU stable pendant analyse |
Planification hors‑prod | Planificateur → Windows Defender | Pas de collision avec backups/ETL |
Exclusions minimales posées | Add-MpPreference -ExclusionPath/-ExclusionProcess | Aucune exclusion large, doc à jour |
Journal Defender surveillé | Event Log → Defender Operational | Boucles 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.