Antimalware Service Executable (MsMpEng.exe) a 100% de CPU no Windows Server 2019: como reduzir o consumo sem perder segurança

O Antimalware Service Executable (MsMpEng.exe), do Microsoft Defender Antivirus, pode atingir ~100% de CPU no Windows Server 2019 e tornar o servidor lento ou quase inacessível. Este guia prático mostra como reduzir o consumo sem comprometer a segurança.

Índice

Visão geral da pergunta

O processo Antimalware Service Executable (MsMpEng.exe), componente do Microsoft Defender Antivirus, consome praticamente toda a CPU em um Windows Server 2019. O objetivo é diminuir o impacto sem abrir brechas de segurança, preferindo medidas seguras, auditáveis e reversíveis.

Roteiro de resposta (do mais seguro/comum ao mais intrusivo)

Execute cada passo durante uma janela de manutenção e valide o efeito antes de avançar. Se possível, registre métricas (PerfMon/contador de processo) por 10–15 minutos após cada mudança.

Confirmar a origem da carga

  • Verifique se há varredura em andamento (completa ou agendada):
    • Event ViewerApplications and Services LogsMicrosoftWindowsWindows DefenderOperational (observe eventos de início/fim de varredura).
    • Task SchedulerMicrosoftWindowsWindows Defender → “Windows Defender Scheduled Scan”.
  • PowerShell — estado do Defender e assinaturas: Get-MpComputerStatus | fl AMServiceEnabled,AntivirusEnabled,FullScanStartTime,FullScanEndTime,QuickScanStartTime,AntivirusSignatureVersion
  • Métricas — confirme que a carga é do MsMpEng.exe: # % de CPU do MsMpEng em tempo real Get-Counter '\Process(MsMpEng)\% Processor Time' -SampleInterval 2 -MaxSamples 15 Uso cumulativo de CPU (segundos) Get-Process -Name MsMpEng | Select-Object ProcessName,CPU,SI,Id

Medidas imediatas de baixo risco

Atualizar engine e assinaturas

Definições desatualizadas e plataformas antigas podem causar reprocessamento intenso. Atualize primeiro:

Update-MpSignature
Opcional (reparar definições se suspeitar de corrupção)
$mp=@('%ProgramFiles%\Windows Defender\MpCmdRun.exe',
      "$env:ProgramData\Microsoft\Windows Defender\Platform\*\MpCmdRun.exe") |
      Get-Item -ErrorAction SilentlyContinue | Select-Object -First 1 -Expand FullName
& $mp -RemoveDefinitions -All
& $mp -SignatureUpdate

Dica: garanta que o Windows Update aplique a plataforma do Defender (não apenas definições).

Limitar o uso de CPU durante varreduras

  • GPO: Computador → Modelos Administrativos → Componentes do Windows → Microsoft Defender Antivirus → Verificação (Scan) → “Especificar a % máxima de CPU durante uma verificação”. Defina 20–40% conforme sua janela de manutenção e I/O.
  • PowerShell (equivalente): Set-MpPreference -ScanAvgCPULoadFactor 30 # 30% é um exemplo seguro

Agendar verificações fora do horário de pico

Ajuste a tarefa Windows Defender Scheduled Scan para a madrugada ou finais de semana. Em servidores críticos, agendar Quick Scan com frequência maior e Full Scan em janelas mais longas costuma equilibrar segurança e desempenho.

Importante: evite marcar “Executar com privilégios mais altos” se isso provocar consumo agressivo. Garanta também que a tarefa não reinicie em caso de perda de janela sem um limite claro.

Aplicar exclusões cirúrgicas (apenas o necessário)

Para servidores de carga (SQL, Exchange, Hyper‑V, backup), adicione exclusões específicas para os caminhos de dados e processos do workload, minimizando varredura de arquivos grandes e altamente mutáveis.

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

Observação: exclusões amplas reduzem a proteção. Prefira caminhos e processos de dados (não pastas do SO). Documente e audite todas as exclusões.

(Opcional e contextual) Evitar varredura de arquivos de rede

Em servidores que apenas leem dados de compartilhamentos remotos (e já há proteção no servidor de arquivos), considere:

Set-MpPreference -DisableScanningNetworkFiles $true

Use com cautela: esse ajuste pode reduzir a visibilidade de ameaças oriundas de shares não confiáveis.

Investigar conflitos e serviços de terceiros

Drivers e serviços (antivírus adicional, agentes de backup, DLP, filtros) podem provocar revarreduras ou loop de acesso a arquivos. Faça um Clean Boot controlado para isolar:

  1. Abra msconfig → guia Serviços → marque “Ocultar serviços Microsoft” → Desativar tudo (apenas para teste em ambiente controlado).
  2. Reinicie e valide o consumo.
  3. Reative em grupos até identificar o componente causador.

Em servidores, esse procedimento exige planejamento. Considere testar em um nó do cluster por vez ou em janela dedicada.

Ajustes avançados (avaliar risco/necessidade)

Desativar temporariamente a proteção em tempo real (teste)

Útil para confirmar se a carga vem da proteção em tempo real. Desative, teste e reative imediatamente:

Set-MpPreference -DisableRealtimeMonitoring $true
... valide comportamento por poucos minutos ...
Set-MpPreference -DisableRealtimeMonitoring $false

Desabilitar “catch‑up scans” (pós-janelas perdidas)

Evita varreduras pesadas disparadas imediatamente após um reboot ou janela perdida:

Set-MpPreference -DisableCatchupFullScan $true
Set-MpPreference -DisableCatchupQuickScan $true

Mantenha uma verificação agendada em horário apropriado para não acumular risco.

Recriar a tarefa agendada de varredura

Se a tarefa estiver corrompida ou com parâmetros inadequados, recrie-a no Task Scheduler ou defina via GPO. Valide Triggers, Conditions (evitar “Stop if running longer than…” excessivamente curto) e Settings.

Reparar a imagem do sistema (casos de corrupção)

Se notar erros anômalos nos logs do Defender, considere reparar a imagem do Windows:

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

Reinstalar/atualizar a plataforma do Defender

Plataformas muito antigas podem apresentar consumo anormal. Em ambientes offline, atualize pela imagem de plataforma mais recente disponível na sua organização. (Sem links externos; siga seu repositório interno.)

Substituir a função de segurança (último recurso)

Só remova o recurso do Microsoft Defender se houver uma solução corporativa equivalente, aprovada e gerenciada centralmente. Ao migrar, evite coexistência prolongada de dois antivírus residentes.

# Avalie o impacto em políticas corporativas e MDE/Intune antes de executar.
Uninstall-WindowsFeature -Name Windows-Defender,Windows-Defender-GUI

Não recomendado como primeira medida.

Tabela: mapeamento rápido (GPO × PowerShell)

ObjetivoDiretiva (GPO)PowerShellObservações
Limitar CPU do scanDefender → Verificação → % máxima de CPUSet-MpPreference -ScanAvgCPULoadFactor 20..40Comece em 30% e ajuste conforme I/O.
Desabilitar catch‑up scansDefender → Verificação → Catch-upSet-MpPreference -DisableCatchupFullScan $true
Set-MpPreference -DisableCatchupQuickScan $true
Agende varreduras em horário de baixa carga.
Exclusões de caminhoDefender → ExclusõesAdd-MpPreference -ExclusionPath "D:\Dados"Exclusões cirúrgicas e auditadas.
Exclusões de processoDefender → ExclusõesAdd-MpPreference -ExclusionProcess "sqlservr.exe"Preferível para workloads intensos.
Atualizar assinaturasWindows Update/WSUSUpdate-MpSignaturePriorize também a plataforma do Defender.
Evitar scan de arquivos de redeDefender → VerificaçãoSet-MpPreference -DisableScanningNetworkFiles $trueAplique apenas onde já exista proteção no servidor de arquivos.

Exclusões recomendadas por workload (exemplos)

Ajuste nomes de pastas conforme seu padrão. Prefira caminhos de dados e processos ao invés de excluir extensões genéricas.

SQL Server

  • Caminhos: D:\SQLData, D:\SQLLogs, D:\SQLTempDB, D:\Backups
  • Processos: sqlservr.exe, (opcional) fdhost.exe se usar Full-Text Search
  • Observações: Base de dados e logs são grandes e com I/O intensivo; evitar varredura a cada escrita reduz spikes.

Hyper‑V

  • Caminhos: diretórios de .VHD/.VHDX, snapshots e checkpoint, por ex. D:\HyperV\VMs
  • Processos: vmms.exe, vmwp.exe
  • Observações: Excluir repositório das VMs evita varredura de discos virtuais gigantes.

Servidores de Backup

  • Caminhos: D:\Backups, repositórios de block storage e cache de agentes
  • Processos: binários do agente (backup.exe como placeholder)
  • Observações: Repositórios sofrem escrita volumosa; manter proteção no endpoint de origem e na restauração.

Exchange (quando aplicável)

  • Caminhos: bancos de dados e logs do Exchange
  • Processos: Store.exe, MSExchangeIS.exe, edgetransport.exe
  • Observações: Revise sua matriz de segurança; exclusões incorretas podem degradar fila de transporte.

Comandos úteis de verificação

# Preferências atuais (exclusões e limites)
Get-MpPreference | fl Exclusion,ScanAvgCPULoadFactor,DisableCatchup

Forçar uma verificação rápida (para testar agendamento/impacto)

Start-MpScan -ScanType QuickScan

Listar ameaças detectadas recentemente

Get-MpThreat | Select ThreatName,ActionSuccess,InitialDetectionTime | Sort InitialDetectionTime -Descending

Validação objetiva: como medir a melhora

  1. Antes de aplicar um ajuste, colete 2–5 minutos de métricas: logman create counter MsMpEngCPU -c '\Process(MsMpEng)\% Processor Time' -si 00:00:05 -o C:\Temp\MsMpEngCPU.blg -f bincirc -max 10 logman start MsMpEngCPU
  2. Após o ajuste, mantenha a coleta por 10–15 minutos e então: logman stop MsMpEngCPU relog C:\Temp\MsMpEngCPU.blg -o C:\Temp\MsMpEngCPU.csv -f csv
  3. Compare os picos e a média de % Processor Time do processo MsMpEng.

FAQ rápido

Posso desativar o Microsoft Defender permanentemente?

Não é recomendado. Sem uma solução equivalente, você aumenta a superfície de ataque. Desative apenas temporariamente para diagnóstico e restaure em seguida.

Exclusões por extensão são uma boa ideia?

Evite excluir extensões genéricas (ex.: .zip, .iso) pois abrangem muitos vetores de ataque. Prefira caminhos de dados e processos específicos do workload.

As políticas locais estão sendo ignoradas. Por quê?

Se o servidor é gerenciado por MDM/Intune/Defender for Endpoint, Tamper Protection e políticas de segurança podem sobrepor GPO/local. Ajuste na origem (consoles corporativos) ou desabilite temporariamente a proteção contra adulteração para alterações planejadas.

O que é “catch‑up scan”?

É uma verificação iniciada automaticamente quando uma varredura agendada foi perdida (ex.: o servidor estava desligado). Em sistemas ocupados, isso pode gerar pico logo após o boot.

Agendo Quick ou Full Scan?

Use Quick Scan com maior frequência (baixa duração) e Full Scan apenas em janelas de manutenção estendidas, combinando com proteção em tempo real e atualizações diárias.

Modelo de execução (passo a passo sugerido)

  1. Confirmar a causa: verifique logs do Defender, tarefa agendada e contadores de desempenho para isolar o MsMpEng.exe.
  2. Atualizar: aplique Update-MpSignature; se necessário, remova e baixe novamente as definições via MpCmdRun.exe.
  3. Limitar CPU: defina -ScanAvgCPULoadFactor por GPO/PowerShell (ex.: 30%).
  4. Agendar scans: mova para a madrugada; iniba “catch‑up scans” automáticos.
  5. Exclusões cirúrgicas: adicione caminhos e processos dos workloads (SQL, Hyper‑V, Backup, etc.).
  6. Checar conflitos: teste Clean Boot controlado para identificar componentes que provocam revarredura.
  7. Ajustes avançados: reparo de imagem (SFC/DISM), recriar tarefa, revisar configuração gerenciada (MDE/Intune/WSUS).
  8. Último recurso: substituir o Defender por solução corporativa equivalente (evite coexistência de motores).

Boas práticas e armadilhas comuns

  • Evite scans completos durante backup: combine agendas para não competir por I/O.
  • Não exclua o SO: nunca exclua C:\Windows ou C:\Program Files inteiros.
  • Documente e audite exclusões: registre motivo, data e responsável. Revise periodicamente.
  • Padronize via GPO: aplicar manualmente em cada servidor aumenta risco de desvio.
  • Atualizações de plataforma: mantenha a plataforma do Defender (não só assinaturas) atual para melhorias de desempenho.
  • Monitore: um conjunto de contadores (CPU do processo, filas de disco, IOPS do volume de dados) ajuda a prever e evitar gargalos.

Causas comuns (para orientar o diagnóstico)

  • Varredura completa coincidindo com alta carga de I/O (backups, compactações, repositórios enormes).
  • Definições/engine desatualizadas causando reprocessamento.
  • Falta de exclusões adequadas para papéis de servidor (SQL/Exchange/Hyper‑V/Backup).
  • Tarefa agendada com “Run with highest privileges” e sem limitação de CPU.
  • Conflitos com drivers/serviços de terceiros (antivírus adicional, filtros de backup, DLP).

Checklist de encerramento

  1. Assinaturas e plataforma atualizadas.
  2. CPU limitada para scans (-ScanAvgCPULoadFactor).
  3. Agendamento em janela de manutenção, catch‑up controlado.
  4. Exclusões específicas e auditadas para os workloads.
  5. Sem conflitos com outros agentes/antivírus.
  6. Logs limpos e métricas estáveis após 24–48h.

Resumo executivo

  1. Confirme que o pico vem de varredura e atualize o Defender.
  2. Limite a CPU e agende scans fora do horário crítico.
  3. Aplique exclusões específicas ao workload (SQL/Hyper‑V/Backup).
  4. Procure e elimine conflitos (Clean Boot controlado).
  5. Use desativação temporária apenas para teste; evite remover o Defender sem substituto corporativo.

Seguindo este roteiro, a maioria dos ambientes reduz drasticamente os picos de CPU do MsMpEng.exe sem abrir mão da segurança.


Anexos práticos (copiar e usar)

Script: limitar CPU, agendar e excluir caminhos (exemplo)

# 1) Cap do uso de CPU do scan
Set-MpPreference -ScanAvgCPULoadFactor 30

2) Evitar catch-up scans imediatos

Set-MpPreference -DisableCatchupQuickScan \$true
Set-MpPreference -DisableCatchupFullScan \$true

3) Exclusões cirúrgicas (ajuste caminhos/processos)

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

4) Atualizar assinaturas

Update-MpSignature

5) Validar preferências

Get-MpPreference | fl Exclusion\,ScanAvgCPULoadFactor,DisableCatchup\

Script: validação rápida do impacto

$before = (Get-Counter '\Process(MsMpEng)\% Processor Time' -SampleInterval 2 -MaxSamples 30).CounterSamples.CookedValue
"Media antes: {0:n2}%" -f ($before | Measure-Object -Average | Select -ExpandProperty Average)
... aplique ajustes ...
$after  = (Get-Counter '\Process(MsMpEng)\% Processor Time' -SampleInterval 2 -MaxSamples 30).CounterSamples.CookedValue
"Media depois: {0:n2}%" -f ($after | Measure-Object -Average | Select -ExpandProperty Average)

Script: recriar verificação rápida sob demanda (tarefa agendada)

$taskName = '\Microsoft\Windows\Windows Defender\QuickScanOnDemand'
$action   = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument '-NoLogo -NonInteractive -WindowStyle Hidden -Command "Start-MpScan -ScanType QuickScan"'
$trigger  = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddMinutes(5))
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Description 'Quick Scan do Defender sob demanda'

Conclusão: com atualização da plataforma, limitação de CPU, agendamento inteligente e exclusões focadas, você diminui o consumo do Antimalware Service Executable no Windows Server 2019 preservando a postura de segurança. Use os scripts e tabelas acima como base para padronizar e auditar suas mudanças.

Índice