Комментарии 7
Антон, спасибо! Здорово!
Если понадобится скрипты, например, для SJK скопировать со слайдов, то слайды тут: https://polarnik.github.io/JVM-profiling-in-Kubernetes/
Чтобы в SVG-изображениях не использовался шрифт Times New Roman, а использовался Roboto, надо скачать и поставить локально шрифт https://fonts.google.com/specimen/Roboto (ссылка в правом верхнем углу страницы - Download family по ссылке выше)
Если появятся вопросы, буду рад. Задавайте тут. Или в telegram: https://t.me/qa_load
Инструмент называется VisualVM
Ещё могу добавить, что надо быть осторожным при включении JFR в JVM под нагрузкой. Это может менять горячие пути исполнения и приводить к резкому протуханию скомпилированного машинного кода. Сталкивался с ситуацией, когда после включения на ходу приложение просто переставало откликаться на довольно продолжительный срок. По этой причине предпочитаю если и включать JFR, то сразу при старте. С ротацией записываемых данных.
Заодно можно изучать картину произошедшего задним числом, когда аномалия уже случилась. У JFR можно попросить кусок записи за интересующий промежуток времени и спокойно его изучить.
Виктор, привет! Спасибо за твою статью про JFR, ссылался на нее в выступлении.
Да, ты прав. С включением профилирования налету, а в частности, с включением Offline-профилирования есть, в дополнение, такие наблюдения.
Запускать offline-профилирование (массовое на группу сервисов) надо с задержкой не менее 1 минуты от старта JVM. Иначе JVM в Kubernets, может вообще не стартовать. Профилировать с 0-й секунды после старта JVM не получается. У меня ни разу не получилось запустить сервис с профилированием прямо со старта.
У сервиса есть readness и leavness-пробы. Пусть 10 минут. А профилирование, запущенное до ввода сервиса в балансировку, может замедлить старт сервиса и сервис стартанет только через 15 минут. А через 10 минут его перезагрузит Kubernetes, так как истечет таймаут на запуск. И чтобы такого не происходило надо или пробы увеличивать. Или оставлять в настройках профилирования самый минимум - профилирование кода семплированием потоков. Может быть сбор исключений. Может быть какую-то еще дополнительную статистику. Не больше. И запускать профилирование с таймером 15 минут от момента старта сервиса. Чтобы сервис сначала нормально стартанул. Включился в балансировку. А уже потом запустилось профилирование.
Вячеслав Смирнов. Профилирование JVM в Kubernetes