Desarrollador Java: pregunta de entrevista
¿Cómo diagnosticas problemas de rendimiento en Java?
Diagnostica rendimiento Java con evidencia: correlaciona métricas y trazas, revisa GC y estados de hilos, captura JFR o async-profiler, corrige el cuello medido y repite la misma carga.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
El diagnóstico va del síntoma a la causa con evidencia en cada paso. Las métricas y trazas del servicio dicen qué endpoints y qué llamadas a dependencias son lentas. Los volcados de hilos muestran si los hilos están bloqueados en un lock, esperando un pool u ocupados calculando. Los logs de GC revelan si las pausas coinciden con los picos de latencia. Java Flight Recorder o async-profiler atribuyen después CPU y asignación a métodos bajo carga similar a producción. El arreglo apunta al cuello de botella medido, y se repite la misma carga para demostrar el cambio en lugar de fiarse de un microbenchmark.
Ejemplo
Una API cuya latencia subía con la carga tenía volcados de hilos llenos de hilos aparcados en el pool de HikariCP; la traza mostró que cada solicitud retenía una conexión mientras llamaba a una API externa lenta. Sacar la llamada externa fuera de la transacción liberó las conexiones antes y recuperó el throughput, sin tocar el tamaño del pool del que se sospechaba al principio.
Errores frecuentes
- Aumentar el heap o los pools de hilos como primer movimiento en lugar de leer la evidencia.
- Medir un método aislado mientras el cuello de botella real es un lock o una base de datos.
- Cambiar varias cosas a la vez de modo que nadie sabe cuál ayudó.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.