Каким профайлером пользовался и как подключался
Что проверяют
Работали ли вы с производительностью руками или только читали о ней. Интервьюеру важно, как вы подключались к живому процессу, что искали и что нашли, поэтому следом почти всегда просят конкретный случай: какая проблема, какой инструмент её показал, что поменяли.
Как отвечать
Стройте ответ вокруг своей истории: симптом, инструмент, способ подключения, находка, результат. Инструменты стоит назвать точно:
- JDK Flight Recorder: встроен в JVM, бесплатен начиная с JDK 11. Запись стартует флагом
-XX:StartFlightRecording=duration=60s,filename=rec.jfrили на живом процессе черезjcmd <pid> JFR.start, разбор в JDK Mission Control. Накладные расходы низкие, годится для прода; - async-profiler: сэмплирующий профайлер без safepoint bias, строит flame graph по CPU, аллокациям и блокировкам. Подключается к работающему процессу командой
asprofили стартует агентом через-agentpath; - VisualVM, YourKit, JProfiler: удобны на стенде. Для удалённого подключения по JMX нужен
-Dcom.sun.management.jmxremote.portи настроенные аутентификация и SSL; - снимки памяти:
jcmd <pid> GC.heap_dump, флаг-XX:+HeapDumpOnOutOfMemoryError, разбор в Eclipse MAT.
В Kubernetes обычно хватает kubectl exec с jcmd в контейнере или kubectl port-forward до порта JMX.
Пример подачи: «У сервиса на Spring Boot рос p99. JFR показал ожидание соединения из пула HikariCP: внутри транзакции шёл синхронный HTTP-вызов. Вынесли вызов за транзакцию, и задержки ушли». Цифры берите свои: выдуманные «ускорили на 30%» разваливаются на первом уточнении. Если с профайлером вы не работали, скажите честно и опишите, как бы действовали: снять запись JFR, найти горячие методы, проверить гипотезу нагрузочным тестом.
Где спотыкаются
Называют VisualVM частью JDK. Он входил в поставку до JDK 8 включительно, сейчас его скачивают отдельно.
Описывают только инструмент и не могут назвать ни одной найденной проблемы. Без истории ответ звучит как пересказ документации.
Путают профайлер с мониторингом: графики в Grafana показывают, что стало медленно, но не где в коде. Интервьюер ждёт разговора на уровне методов и стеков.