Пользовался ли профилировщиками приложений кроме IDE
Что проверяют
Умеете ли вы искать причину тормозов замером, а не догадкой, и знаете ли инструменты, которые работают на боевом приложении, а не только на локальной машине. Профилировщик в IDE отвечает про демо, спрашивают же про прод.
Как отвечать
Назовите инструменты и скажите, чем они отличаются:
- JDK Flight Recorder вместе с JDK Mission Control: штатная запись событий JVM с малым накладным расходом, включается на живом процессе через
jcmd. Даёт выделения, паузы сборщика, блокировки, ввод-вывод; - async-profiler: сэмплирование стеков без привязки к точкам безопасности, режимы cpu, alloc, lock, wall и флейм-граф. Основной инструмент, когда непонятно, что жрёт процессор;
- VisualVM, YourKit, JProfiler: подключение по JMX, обзор потоков, кучи, горячих методов;
- дамп кучи плюс Eclipse MAT: поиск утечек по дереву доминаторов, видно, кто держит ссылку;
- логи сборщика мусора,
jcmd,jstack,jstatдля диагностики без установки чего-либо.
Сильный ход: разница между сэмплированием и инструментированием. Инструментирующий профилировщик вставляет замеры в методы и искажает картину на мелких часто вызываемых методах, вплоть до отказа JIT их встраивать. Горячий код ищут сэмплированием, инструментирование оставляют для точного подсчёта вызовов.
Закончите порядком действий: метрики на проде показывают, что медленно, профиль снимается под нагрузкой, гипотеза проверяется замером до и после.
Где спотыкаются
Называют проценты улучшения, которых никто не мерил. Фразу «поднял производительность на треть» без указания нагрузки, метрики и способа замера интервьюер слышит каждый день, и звучит она как выдумка, даже когда правда.
Второе: профилируют холодную JVM. Первые секунды идут по интерпретатору, JIT ещё не скомпилировал горячие участки, и верх профиля занимает загрузка классов вместо логики. Нужен прогрев, а для микрозамеров JMH.
Третье: путают утечку с высоким потреблением. Растущее потребление само по себе ни о чём не говорит: куча живёт до сборки, а память вне её (метапространство, прямые буферы, стеки потоков) в график кучи не попадает. Вывод делают по логам сборщика и дампу, а не по диспетчеру процессов.