Depuração, Profiling e Análise de Memória¶
Depuração explica comportamento incorreto. Profiling mede onde recursos são gastos. Um debugger revela estado em um instante; um profiler revela caminhos quentes ou alocações ao longo do tempo. Nenhum substitui contrato reproduzível e evidências.
Investigação disciplinada¶
- Declare precisamente o esperado e o observado.
- Preserve timestamps, entradas, versões, configuração e IDs de correlação.
- Reproduza no menor escopo seguro ou caracterize a frequência.
- Formule hipótese falsificável.
- Escolha uma medição que a diferencie das alternativas.
- Corrija a causa, adicione teste de regressão e verifique sinais operacionais.
Mude uma variável relevante por vez. Busca binária em versões, entradas ou fluxo de execução reduz o espaço de busca. Separe fatos de inferências nos registros.
Profiling de CPU e tempo decorrido¶
Profilers por amostragem estimam onde CPU ou tempo se acumulam com menor overhead. Tempo bloqueado, CPU e decorrido respondem perguntas distintas. Um método quente pode ser sintoma do chamador; inspecione árvores de chamadas sob carga representativa.
Java Flight Recorder captura CPU, alocação, locks, GC e eventos do runtime. Use JMH para microbenchmarks; não deduza throughput de debugger ou uma medição isolada.
Análise de memória¶
Diferencie heap vivo, taxa de alocação, memória nativa e recursos retidos. Alta alocação não é necessariamente vazamento; vazamento é alcançabilidade indesejada ou recurso externo não liberado. Compare histogramas/dumps, dominadores, caminhos de retenção e GC.
Dumps podem conter segredos ou dados pessoais. Capture, transfira, retenha e apague sob política explícita. Comece por evidências de menor overhead.
Evidências de concorrência¶
Thread dumps mostram locks, espera, deadlock e saturação em um instante. Várias amostras distinguem bloqueio persistente de espera normal. Correlacione filas, aquisição de conexões, latência downstream e métricas de recursos limitados.
Após corrigir, mantenha teste focado, compare a medição original e remova logging temporário volumoso ou endpoints inseguros.