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

⚙️ Componente: Aplicações e Serviços. Lentidão aplicacional pode não estar relacionada com recursos de sistema — pode ser causada por bloqueios de base de dados, timeouts de serviços externos, ficheiros locked ou dependências em falha. Este artigo cobre as ferramentas Sysinternals essenciais e comandos PowerShell para diagnóstico aplicacional.

Quando suspeitar de problema aplicacional específico?

  • CPU, RAM e disco estão normais mas a aplicação está lenta
  • Apenas uma aplicação é afetada — as restantes funcionam normalmente
  • Erros de permissão ou ficheiros locked em logs de aplicação
  • Serviço que inicia mas para após alguns minutos
  • Operações de base de dados com timeouts mas o servidor DB parece saudável

1. Process Explorer — Análise Avançada de Processos

O Process Explorer da Sysinternals é o substituto avançado do Task Manager. Descarregar gratuitamente em docs.microsoft.com/sysinternals. Executar como Administrador.

Funcionalidades essenciais para diagnóstico

  • Árvore de processos: mostra relações parent-child — útil para identificar processos spawned por serviços ou scripts
  • Coluna CPU: ordenar por CPU. As barras coloridas mostram user mode (azul) vs kernel mode (vermelho)
  • Duplo clique num processo → separador Threads: mostra todas as threads e o seu estado — threads em Wait:UserRequest podem indicar bloqueio
  • Separador Performance: gráficos de CPU, RAM e I/O para o processo selecionado
  • Separador Handles: lista de handles abertos pelo processo (ficheiros, chaves de registo, mutexes)
💡 Dica: Em Options → Replace Task Manager o Process Explorer torna-se o gestor de tarefas default ao pressionar Ctrl+Shift+Esc — recomendado para qualquer sysadmin Windows.

2. Process Monitor — Rastreio de Atividade Aplicacional

O Process Monitor (procmon.exe) regista em tempo real todas as operações de filesystem, registo e rede de todos os processos. Descarregar das Sysinternals.

Filtros essenciais para diagnóstico aplicacional

Cenário Filtro a aplicar O que procurar
App específica lenta Process Name contains <nome> Operações com Duration elevada
Erros de permissão Result contains ACCESS DENIED Ficheiros ou chaves de registo inacessíveis
Ficheiros bloqueados Result contains FILE LOCKED Conflitos de acesso entre processos
DLLs ou ficheiros em falta Result contains NOT FOUND Dependências em falta
Acesso a rede Operation contains TCP Conexões lentas ou com erro
⚠️ Atenção: O Process Monitor gera dados muito rapidamente. Definir os filtros antes de iniciar o rastreio para evitar ficheiros de log de centenas de GB. Usar Filter → Filter (Ctrl+L) antes de capturar.

Análise de operações lentas

  1. Iniciar rastreio e reproduzir o problema durante 30–60 segundos
  2. Parar o rastreio (Ctrl+E)
  3. Menu Tools → File Summary — ficheiros com maior atividade de I/O
  4. Menu Tools → Process Activity Summary — resumo de operações por processo
  5. Ordenar coluna Duration para ver as operações mais lentas

3. Análise de Serviços Windows

# Todos os serviços em execução
Get-Service | Where-Object {$_.Status -eq 'Running'} |
    Sort-Object DisplayName | Format-Table DisplayName, Name, Status
# Serviços automáticos que estão parados — deviam estar ativos
Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'} |
    Format-Table DisplayName, Name, Status
# Ver dependências de um serviço (substituir <nome>)
Get-Service -Name <nome_servico> -DependentServices
Get-Service -Name <nome_servico> -RequiredServices
# Histórico de arranques/paragens de um serviço no Event Viewer
Get-EventLog -LogName System -Source 'Service Control Manager' -Newest 20 |
    Where-Object {$_.Message -match '<nome_servico>'} |
    Select-Object TimeGenerated, Message | Format-List
💡 Dica: Um serviço que aparece em estado Stopped com StartType = Automatic indica falha no arranque. Verificar sempre o Event Viewer → System com Source = Service Control Manager para ver a razão da falha.

4. Identificar Handles e Ficheiros Locked

Quando uma operação falha com “ficheiro em uso por outro processo”:

# No Process Explorer: Ctrl+F → pesquisar pelo nome do ficheiro
# Mostra qual processo tem o handle aberto

Alternativamente, usando a ferramenta handle.exe das Sysinternals:

# Listar todos os handles de um processo
handle.exe -p <nome_processo>

# Pesquisar que processo tem um ficheiro locked
handle.exe C:\caminho\para\ficheiro.txt

5. Diagnóstico IIS — Web Server

# Estado do IIS e Application Pools
iisreset /status
# Listar Application Pools (requer módulo WebAdministration)
Import-Module WebAdministration
Get-WebConfiguration system.applicationHost/applicationPools/add |
    Select-Object name, state, managedRuntimeVersion | Format-Table
# Worker processes ativos
%windir%\system32\inetsrv\appcmd.exe list wp
# Requests ativos em processamento
%windir%\system32\inetsrv\appcmd.exe list requests

Se um AppPool estiver parado, verificar o Event Viewer → Applications and Services Logs → Microsoft → Windows → IIS-W3SVC para a razão da falha.


6. Checklist — Diagnóstico Aplicacional

  • ✅ CPU, RAM e disco normais — o problema é específico da aplicação?
  • ✅ Process Explorer: o processo está Responding? Threads em estado de espera?
  • ✅ Process Monitor: erros ACCESS DENIED ou NOT FOUND?
  • ✅ Process Monitor: operações com Duration acima de 1 segundo?
  • ✅ Serviços automáticos parados: Get-Service | Where StartType Automatic
  • ✅ Dependências do serviço: todos os serviços requeridos estão ativos?
  • ✅ Event Viewer → Application: erros nas últimas horas?

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário