⚙️ 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)
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 |
Análise de operações lentas
- Iniciar rastreio e reproduzir o problema durante 30–60 segundos
- Parar o rastreio (Ctrl+E)
- Menu Tools → File Summary — ficheiros com maior atividade de I/O
- Menu Tools → Process Activity Summary — resumo de operações por processo
- 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
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?
