Pergunta de entrevista para Desenvolvedor Java

Como você faz profiling de um serviço Java em produção sem tirá lo do ar?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Use o Flight Recorder, que é embutido na JVM e desenhado para gravação contínua de baixo overhead. Inicie com jcmd num processo em execução, capture uma janela e abra a gravação no Mission Control para ver métodos quentes, alocação por site, contenção de lock, garbage collection e taxas de exceção. Para flame graphs com frames nativos e Java juntos, um async profiler é o companheiro de sempre, e heap dumps seguem sendo a ferramenta para vazamentos.

Por que os entrevistadores perguntam isso

O entrevistador está checando se você consegue investigar um sistema vivo com ferramentas reais em vez de adicionar logs de tempo e fazer redeploy. Saber que o Flight Recorder vem junto e é seguro rodar em produção, e que as visões interessantes são alocação e contenção de lock em vez de só CPU, é o diferencial. Também abre a discussão sobre fazer profiling com honestidade, já que um benchmark com JIT aquecido não é a mesma coisa que produção.

Como estruturar sua resposta

  • Cite a ferramenta embutida e por que ela é segura em produção.
  • Descreva como você inicia uma gravação num processo em execução.
  • Diga quais visões você olha e em que ordem.
  • Acrescente ferramentas complementares para vazamentos e flame graphs.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Flight Recorder primeiro, porque ele vem com a JVM e o perfil padrão tem overhead baixo o bastante para deixar rodando. Eu me conecto com jcmd no processo em execução, gravo alguns minutos que incluam o comportamento lento, faço o dump e abro no Mission Control. A ordem em que eu olho as coisas depende do sintoma. Para CPU eu vou para métodos quentes, mas para latência eu normalmente aprendo mais com alocação por call site, porque alocação excessiva guia as pausas de coleta, e com contenção de lock, que é onde um bloco synchronized num caminho quente aparece na hora. Garbage collection e taxas de exceção estão na mesma gravação, então eu consigo correlacionar em vez de chutar. Se eu quero um flame graph que mostre frames nativos ao lado dos de Java, eu uso um async profiler, que também evita o viés de safepoint que profilers de amostragem mais antigos tinham. Para vazamentos de memória a ferramenta é um heap dump e uma dominator tree, já que um profile me mostra alocação, não retenção. E eu sempre comparo com uma gravação de referência de um período saudável, porque um profile sozinho não tem noção do que é normal.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Que overhead o perfil padrão do Flight Recorder adiciona?
  • O que é viés de safepoint, e por que isso importa para profilers?
  • Como você faria profiling de um problema de startup em vez de regime estável?

Mais perguntas para Desenvolvedor Java

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot