Fuga de memória no Paged Pool do Windows Server 2019: diagnóstico com PoolMon/WPA, correção no CU de jan/2025 e monitorização

Fuga de memória no Paged Pool do Windows Server 2019 pode derrubar VMs e hosts inteiros. Este guia prático reúne sintomas, diagnóstico com WPR/WPA, RAMMap e PoolMon, correção via updates (incluindo o CU de jan/2025), mitigação provisória e monitorização para impedir novas quedas.

Índice

Visão geral do problema

Em ambientes com Windows Server 2019 (versão 1809, build 17763), administradores observaram crescimento contínuo do Paged Pool até consumir toda a RAM. O servidor passa a trocar intensamente para disco, responde de forma errática a RDP/SMB/WinRM, torna-se inacessível e, por fim, pode bugcheckar (falha de sistema). Em casos reportados, a tag “SM00” — associada ao stack de virtualização/armazenamento (Hyper‑V/StorVSP) — aparece no topo da lista do PoolMon.

Como o leak se manifesta

  • Memória: contadores de desempenho mostram Pool Paged Bytes e Pool Paged Resident Bytes subindo continuamente, sem liberação.
  • Serviços afetados: quedas de SMB, falhas em VMs Hyper‑V, latências elevadas em aplicativos e timeouts em IIS/SQL.
  • Eventos: logs de Kernel‑Memory e Warning/Errors genéricos por falta de recursos; por vezes, dumps incompletos devido à baixa memória.
  • Após reinício: o problema reaparece em horas ou dias, sugerindo fuga de alocações e não simples pressão de carga.

Entendendo o Paged Pool no Windows

O Paged Pool é uma região de memória do kernel que pode ser paginada para disco. Drivers e componentes do sistema alocam blocos ali para metadados, buffers e estruturas internas. Fugas (leaks) surgem quando um componente aloca repetidamente sem liberar, fazendo o total crescer de forma monotônica.

Em x64 modernos, o limite do Paged Pool é elástico. Por isso, “tapar o sol com a peneira” (limitando artificialmente o pool) é prática desaconselhada: mascara o bug e cria instabilidade. O caminho correto é identificar a tag que vaza, mapear o driver e corrigir via atualização do sistema/driver.

Fluxo de resolução recomendado

FaseAções recomendadasFinalidade
DiagnósticoUsar Windows Performance Recorder/Analyzer (WPR/WPA), RAMMap e PoolMon para descobrir qual processo/driver ou pool tag causa o vazamento.Identificar a origem
AtualizaçõesManter o sistema com Cumulative Updates e Servicing Stack Updates mais recentes. O CU de janeiro/2025 corrige o leak associado à tag SM00. Após o patch, o Paged Pool tipicamente estabiliza em ~18% da RAM.Corrigir o bug
Mitigação temporáriaAjustar com parcimônia o valor SystemPtesLimit no Registro para conter crescimento anômalo de pools específicos. Uso estritamente provisório.Ganhar tempo até o patch
Workaround para bugs conhecidosQuando o vazamento provém de atualização problemática (ex.: LSASS em 2024), aplicar Known Issue Rollback (KIR) até a correção final.Evitar reinicializações
MonitorizaçãoCriar contadores de desempenho para Paged e Non‑Paged Pool, com alertas ao atingir limiares críticos.Detecção precoce

O que os administradores observaram na prática

  • Dez/2024: início do leak em múltiplos ambientes mesmo “em dia” com patches.
  • Jan/2025: a tag SM00 (stack Hyper‑V/StorVSP) identificada como principal causadora em muitas VMs.
  • Pós‑CU jan/2025: consumo estabilizado por vários dias e fim de reinícios frequentes.

Diagnóstico, do zero ao driver culpado

Passo a passo com PoolMon

  1. Instale/abra o PoolMon com privilégios de administrador.
  2. Pressione P até filtrar para Paged; depois B para ordenar por Bytes.
  3. Anote as tags no topo (ex.: SM00, NDU!, Srv2, etc.).
  4. Se necessário, use poolmon -i <TAG> para focar em uma única tag e observar sua evolução em tempo real.

Mapeando a tag ao driver

cd %SystemRoot%\System32\drivers
strings.exe -n 8 *.sys | findstr /i SM00

O nome do arquivo de driver (por exemplo, um componente de virtualização/armazenamento) surgirá próximo da tag. Alternativas:

  • findstr /m /s /i SM00 *.sys para localizar arquivos que contenham a cadeia.
  • Em RAMMap, guias Drivers e File Summary ajudam a cruzar uso de memória por driver/arquivo.

Captura com WPR/WPA

  1. Inicie uma sessão com o cenário Memory no WPR (interface gráfica) ou: wpr -start Memory -filemode REM Reproduza o padrão de uso por alguns minutos wpr -stop C:\Temp\Leak.etl
  2. Abra o WPA e inspecione os gráficos de Pool Allocations por tag, stack e módulo.
  3. Correlacione a evolução da tag com eventos de driver/serviço para fechar o laudo.

Corrigindo de forma definitiva

Depois de identificar a origem (por exemplo, a tag SM00 do subsistema de virtualização/armazenamento), aplique as seguintes ações:

  • Atualizações do Windows: instale o Cumulative Update mais recente (mínimo: janeiro/2025) e o Servicing Stack Update correspondente.
  • Drivers de Integração: em VMs Hyper‑V ou Azure, atualize as Integration Components (ICs). Versões antigas podem conter o bug relacionado à tag SM00.
  • Drivers de Terceiros: se o mapeamento da tag indicar um miniport/NDIS/storage de fornecedor, reinstale/atualize o pacote e notifique o fabricante com evidências (capturas do PoolMon/WPA).

Como validar o sucesso do patch

  1. Reinicie o servidor após aplicar os updates.
  2. Monitore por horas/dias: o Paged Pool deve estabilizar abaixo de ~25% da RAM (média real relatada ~18%).
  3. No PoolMon, a tag problemática não deve mais crescer monotonicamente.

Mitigação temporária (use somente quando não há patch imediato)

Se o negócio não permite aguardar a correção e o leak é severo, admite‑se uma mitigação de curto prazo:

  • SystemPtesLimit (Registro: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management): ajuste cuidadoso pode conter padrões de alocação que estouram o espaço de PTEs e pressionam pools. Não é solução definitiva e pode introduzir efeitos colaterais.
  • Evite definir manualmente PagedPoolSize/PoolUsageMaximum em sistemas x64 — são abordagens legadas e arriscadas.
  • Planeje reinícios controlados fora de horário de pico para “resetar” o estado até a correção ser aplicada.

Workaround com Known Issue Rollback (KIR)

Quando uma atualização específica introduz instabilidade (ex.: vazamentos em LSASS observados em 2024), use o KIR para reverter de forma seletiva a parte problemática do update, sem desinstalá‑lo por completo.

  1. Verifique se a Microsoft publicou um KIR para o problema.
  2. Em domínios, importe o template de Diretiva de Grupo (GPO) do KIR e vincule à OU adequada.
  3. Confirme a aplicação em clientes/servidores e monitore a estabilização da memória.

O KIR é uma ponte até o próximo CU com a correção definitiva.

Monitorização pró‑ativa

Contadores essenciais e limiares práticos

Objeto/ContadorDescriçãoLimiar sugeridoAção
Memory\Pool Paged BytesTotal de bytes no Paged Pool> 25% da RAM por > 30 minInvestigar tags com PoolMon
Memory\Pool Paged Resident BytesParte residente do Paged PoolSubida monotônicaConfirmar fuga persistente
Memory\Pool Nonpaged BytesTotal no Non‑Paged Pool> 20% da RAMChecar drivers NDIS/Storage
Processo\Private Bytes (por processo)Memória privada de processos suspeitos (ex.: vmms, vmmem, lsass)Crescimento linearCorrelacionar com WPA
LogicalDisk\Avg. Disk sec/Read/WritePressão por paginação> 20 ms sustentadoImpacto em I/O por thrashing

Criação rápida de alertas

Você pode automatizar alertas com Data Collector Sets ou logman:

REM Cria um conjunto que coleta contadores a cada 15s
logman create counter LeakWatch -f csv -o C:\PerfLogs\Leak\leak.csv -si 00:00:15 ^
-c "\Memory\Pool Paged Bytes" "\Memory\Pool Paged Resident Bytes" "\Memory\Pool Nonpaged Bytes"

REM Inicia na inicialização
logman update LeakWatch -rf 7 -v mmddhhmm -cnf 01:00:00
schtasks /Create /SC ONSTART /TN LeakWatchStart /TR "logman start LeakWatch" /RU SYSTEM 

Para alertas, crie um Task Scheduler que lê o CSV periodicamente e dispara evento/email quando o valor exceder o limiar. Em ambientes com SIEM, envie os contadores via agente.

Recomendações complementares

  • Atualize ICs de VMs Hyper‑V/Azure: versões antigas foram associadas ao leak da tag SM00.
  • Rede/NDU: em suspeita de drivers de rede, isole usando PoolMon e desative o serviço NDU apenas para testes; preferir a atualização/correção do driver.
  • Evite limitar o Paged Pool permanentemente em x64. Corrija o driver ou aplique o patch oficial.
  • Documente o caso: registre a tag, versão do driver, versão do SO e linha do tempo; isso agiliza atendimento de fornecedores.

Dicas específicas por papel do servidor

PapelTags/Áreas comunsAções sugeridas
Hyper‑V Host/VMSM00, VMBus, StorVSPAtualizar CU/SSU, ICs; revisar caminhos de storage e offloads
File ServerSRV2/SRVNETAplicar CU; validar drivers de HBA/NIC; ajustar SMB Direct se aplicável
Controlador de DomínioLSASSKIR quando disponível; aplicar hotfix/cu de correção; avaliar patches de segurança recentes
Servidor de ImpressãoSpooler/splwow64Isolar drivers herdados; padronizar pacotes tipo 4; revisar assinaturas

Playbook de triagem

  1. Aplicar o CU mais recente (mínimo: janeiro/2025) e o SSU correspondente; reiniciar.
  2. Observar no PerfMon se o Paged Pool permanece abaixo de 25% da RAM durante a carga típica.
  3. Persistindo o problema:
    • Executar PoolMon → ordenar por Bytes → anotar a tag de topo.
    • Mapear a tag para o driver com findstr/strings.exe.
    • Atualizar, reinstalar ou desabilitar o driver identificado; se for de terceiro, abrir chamado anexando evidências.
  4. Automatizar a monitorização com Data Collector Sets e alertas para agir antes do esgotamento.

Checklist de pós‑correção

  • Paged Pool estabilizado (< 25% da RAM; alvo típico ~18%).
  • Nenhuma tag apresentando crescimento linear por horas.
  • Sem quedas/bugchecks nos últimos ciclos de pico.
  • Drivers e ICs no nível recomendado pelo fabricante/Windows Update.
  • Alertas configurados e testados.

FAQ rápido

Qual a diferença entre Paged e Non‑Paged Pool?
O Paged pode ser paginado para disco; o Non‑Paged deve permanecer sempre na RAM. Ambos são críticos: vazamentos em qualquer um esgotam a memória do kernel.

O Hyper‑V “causa” o leak?
Não por si só. Em 2024/2025, casos apontaram a tag SM00 (stack de virtualização/armazenamento) como origem. A correção veio em CUs subsequentes e na atualização de ICs/drivers.

Devo alterar o tamanho do Paged Pool?
Não é recomendado em x64. Prefira corrigir o driver/patch e usar mitigação apenas como último recurso e por curto período.

Posso desativar o NDU para “resolver”?
Só para fins de teste/diagnóstico quando a tag indicar drivers de rede. A resolução definitiva é corrigir/atualizar o driver implicado.

Resumo final

Fugas no Paged Pool do Windows Server 2019 são resolvíveis com método: identificar a tag (PoolMon/WPA), aplicar o CU/SSU adequado — com destaque para o CU de janeiro/2025 no caso da SM00 —, atualizar ICs e drivers e operar com monitorização contínua. Assim, você elimina reinicializações frequentes e devolve estabilidade às cargas de produção.

Índice