Ligue o logging de garbage collection e alinhe os timestamps das pausas com as requisições lentas. Se os picos coincidem com as pausas, olhe taxa de alocação, promoção e folga de heap antes de mexer em qualquer flag, já que a maioria das pausas vem de alocar demais ou de um heap pequeno demais. Se não coincidem, cheque o time to safepoint, já que um safepoint longo trava todas as threads e parece exatamente uma pausa de garbage collection.
Por que os entrevistadores perguntam isso
Depurar latência de cauda é uma habilidade sênior, e o entrevistador quer evidência em vez de chute em flags. Correlacionar logs de pausa com traces de requisição, e saber que safepoints, page faults ou um vizinho barulhento no container podem produzir o mesmo sintoma, mostra pensamento metódico. Também revela se você corrigiria a causa na aplicação ou tamparia o buraco com tuning do coletor.
Como estruturar sua resposta
- Pegue os dados: logs de garbage collection mais tempos por requisição.
- Correlacione as janelas de pausa com as requisições lentas.
- Investigue taxa de alocação e dimensionamento de heap antes das flags.
- Considere causas fora do garbage collection, como safepoints ou a plataforma.
Exemplo de resposta
Eu quero duas linhas do tempo. O unified logging me dá cada pausa com sua causa e duração, e meus traces me dão as requisições lentas, então a primeira pergunta é simplesmente se elas se alinham. Se sim, eu resisto a mudar flags e olho o porquê. Normalmente o serviço aloca enormemente por requisição, algo como construir listas intermediárias num laço ou logar um payload serializado em toda chamada, então a correção é alocar menos. Às vezes o heap está apenas apertado demais e as coletas rodam o tempo todo, ou no G1 o código aloca arrays grandes que viram objetos humongous e se comportam mal. Só depois disso eu consideraria migrar para um coletor de baixa pausa, e trataria isso como um tradeoff em vez de um ganho de graça. Se as pausas não correlacionam, eu olho em outro lugar: o time to safepoint pode ser longo mesmo quando a coleta em si é curta, então uma thread num laço contado trava todo mundo. Eu também já persegui um caso que acabou sendo throttling de CPU do container, onde o processo era tirado do escalonador inteiro e nenhum tuning de JVM teria ajudado.
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 funcionaPerguntas de acompanhamento que você pode esperar
- O que é um safepoint, e por que chegar a um pode demorar muito?
- Como você reduziria a taxa de alocação num caminho quente de requisição?
- Como o throttling de CPU do container aparece nas métricas da JVM?
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