← Guia Completo: Diagnóstico de Desempenho em VMs Windows

🖥️ Componente: CPU. A contention de CPU é uma das causas mais comuns de lentidão em VMs Windows. Este artigo cobre todas as ferramentas nativas — do Task Manager ao PerfMon — com os contadores exatos a monitorizar e os comandos PowerShell prontos a executar.

Quando suspeitar de problema de CPU?

  • Sistema geral lento mas disco e rede parecem normais
  • Aplicações demoram a responder, especialmente ao abrir
  • Ventoinhas do servidor em velocidade máxima (servidores físicos)
  • Task Manager mostra CPU frequentemente acima de 80–90%
  • Em VMs: o problema afeta toda a VM igualmente

1. Task Manager — Diagnóstico Visual Inicial

O primeiro passo é sempre o Task Manager. Abre com Ctrl+Shift+Esc.

1
Separador Performance → CPU: observar a % de utilização global, a velocidade atual (GHz), o número de cores/sockets lógicos e o gráfico histórico dos últimos 60 segundos.
2
Separador Processes: clicar na coluna CPU para ordenar de forma descendente. Identificar os 5 processos com maior consumo.
3
Separador Details: vista granular com PID, permitindo correlacionar com Event Viewer e Process Monitor. Colunas úteis: CPU, CPU Time, Status.
⚠️ Atenção: Se a CPU mostrar 100% em intervalos regulares (ex: de hora a hora), verificar o Task Scheduler e serviços de backup ou antivírus — são os culpados mais comuns em picos periódicos.

2. Resource Monitor — Análise Aprofundada

Abre com Win+R → resmon.exe ou diretamente a partir do Task Manager (botão Open Resource Monitor no fundo do separador Performance).

  • Separador CPU: expande cada processo para mostrar as handles e módulos DLL ativos.
  • Coluna Average CPU — média dos últimos 60 segundos, mais representativa que o valor instantâneo.
  • Coluna Status — processos em estado Suspended ou Not Responding indicam bloqueio.
💡 Dica: No Resource Monitor, os processos em amarelo têm CPU acima da média do sistema. Os assinalados com Not Responding estão bloqueados — verificar se têm dependências em falha.

3. Performance Monitor (PerfMon) — Contadores de CPU

Abre com Win+R → perfmon.exe. Navegas para Monitoring Tools → Performance Monitor e clicas em + para adicionar contadores.

Contadores essenciais a adicionar

Contador O que mede Limiar de alerta
\Processor(_Total)\% Processor Time Utilização global de CPU > 90% sustentado
\Processor(_Total)\% Privileged Time Tempo em modo kernel (drivers) > 25% indica driver problemático
\Processor(_Total)\% User Time Tempo em modo utilizador (apps) Comparar com % Processor Time
\Processor(_Total)\% Interrupt Time Interrupções de hardware > 15% indica problema de driver/HW
\Processor(_Total)\% DPC Time Deferred Procedure Calls > 5% indica problema de driver
\System\Processor Queue Length Processos à espera de CPU > 2 por core = CPU bottleneck
\System\Context Switches/sec Comutações de contexto Valores muito elevados = excesso de threads
🔴 Alerta crítico: Processor Queue Length persistentemente acima de 2 por core indica que o sistema tem mais trabalho do que CPUs disponíveis para processar. Em VMs, verificar se o host físico está sobrecarregado antes de adicionar vCPUs.

Definir o intervalo de amostragem para 1 segundo e observar durante 5–10 minutos no período de degradação para capturar o padrão real.


4. PowerShell — Análise de CPU por Processo

Executar no PowerShell com privilégios de Administrador:

# Top 10 processos por CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU
# Monitorização contínua a cada 3 segundos (Ctrl+C para parar)
while ($true) {
    Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU, Id | Format-Table
    Start-Sleep 3
    Clear-Host
}
# CPU por processo via WMI (mais preciso)
Get-WmiObject Win32_PerfFormattedData_PerfProc_Process |
    Sort-Object PercentProcessorTime -Descending |
    Select-Object -First 10 Name, PercentProcessorTime, IDProcess |
    Format-Table -AutoSize

5. Verificar Afinidade e Prioridade

# Ver prioridade de um processo (substituir <PID>)
Get-Process -Id <PID> | Select-Object Name, Id, PriorityClass, Responding
# Baixar prioridade de um processo problemático temporariamente
(Get-Process -Id <PID>).PriorityClass = 'BelowNormal'
💡 Nota para ambientes Hyper-V: Verificar também as definições de Virtual Processor no Hyper-V Manager. O número de vCPUs atribuídas pode ser inadequado para a carga — o ideal é não exceder o número de cores físicos disponíveis no host.

6. Pontos de verificação rápida — Checklist CPU

  • ✅ Task Manager → Processes ordenado por CPU — qual o top processo?
  • ✅ PerfMon: Processor Queue Length acima de 2 por core?
  • % Interrupt Time ou % DPC Time elevados? (problema de driver)
  • ✅ O pico de CPU é contínuo ou periódico? (periódico → verificar Task Scheduler)
  • ✅ Em VMs: verificar CPU steal no host (Hyper-V Manager → VM → Statistics)
  • ✅ Antivírus: excluir temporariamente para verificar impacto no baseline

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário