Pular para conteúdo

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

  1. Declare precisamente o esperado e o observado.
  2. Preserve timestamps, entradas, versões, configuração e IDs de correlação.
  3. Reproduza no menor escopo seguro ou caracterize a frequência.
  4. Formule hipótese falsificável.
  5. Escolha uma medição que a diferencie das alternativas.
  6. 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.