О докладчике
Алексей выступал на jug.msk.ru в четвёртый раз. О впечатлениях от его предыдущих выступлений можно прочитать здесь (4 июня 2015 года), здесь (20 января 2016 года) и здесь (30 августа 2016 года).
Со времени, прошедшего с его предыдущего выступления на jug.msk.ru, он успел поучаствовать в качестве докладчика ещё на ряде конференций:
- «Эволюция нагрузочного тестирования – от простой автоматизации до BDD» (SECR 2016: видео)
- «I Know Why Your Java is Slow» (Devoxx 2016: презентация)
- «Нагрузочное тестирование – автоматизируем полностью» (Heizenbug 2016: видео, презентация)
- «Java и Linux — борьба за микросекунды» (United Dev Conf 2017: видео, презентация)
- «Java и Linux — особенности эксплуатации» (HighLoad++ 2017: видео)
Файлы презентаций докладов Алексея теперь находятся на Speaker Deck. Блог с техническими статьями по-прежнему доступен здесь, там есть раздел с полным списком докладов со ссылками на видео и файлы презентаций.
О докладе
Мастер-класс является дополненным и доработанным вариантом выступления, прошедшего в конце прошлого года на встрече питерского JUG.ru.
Анонс мероприятия вызвал небывалый ажиотаж, зал был полностью заполнен. Непривычный формат (обычно встречи являются докладом или докладами на какую-то общую тему), вероятно, также подогрел интерес. Рекомендовано было взять ноутбуки и предварительно была выслана инструкция по подготовке перед посещением.
Алексей перед началом встречи. Андрей Когунь традиционно приветствует участников, напоминая о ближайших конференциях и анонсируя собственный доклад на JPoint 2018.
В первой части был сделан экскурс в профилирование Java-приложений с обзором возможностей Java Flight Recorder и Java Mission Control. В качестве подопытного использовалось приложение, доступное на GitHub.
Во второй части демонстрация была продолжена. Материал исключительно полезен как менее подготовленной аудитории (в качестве обзорного), так и продвинутой (представление более сложных случаев с квалифицированными комментариями). Возможность задать вопросы и получить на них ответы (в перерыве или в конце встречи) оказалась весьма востребованной.
В конце встречи Алексей упомянул об учебном курсе Эффективное профилирование Java приложений, который планирует прочитать 21-22 мая, подробности здесь.
Ссылка на презентацию. Фотографии будут доступны скоро в VK и Google+, видео — на YouTube. Также можно подписаться на рассылку с анонсами следующих встреч jug.msk.ru.
Комментарии (15)
aragozin
16.03.2018 00:52+2Слайды, которые я использовал по ходу мастер класса доступны тут.
dbelob Автор
16.03.2018 01:18Алексей, спасибо большое за интереснейший мастер-класс! Можно ещё привести точные даты проведения упомянутого учебного курса по профилированию.
aragozin
16.03.2018 07:18+1Я набираю группу для двух дневного тренинга 21-22 Мая (программа). По вопросам участия пишите в личку или на почту.
igor_suhorukov
16.03.2018 22:16+1Полезная и востребованная тема курсов, порекомендую коллегам! Жаль я уеду в это время в командировку и на Spring I/O. Планируешь ли осенью этот же тренинг?
lany
16.03.2018 13:24Я один заметил, что на титульном слайде не весь экран опечатка — hitchKiker вместо hitchhiker? Если да, то мне приз!
nehaev
16.03.2018 14:25Спасибо за анонс! Вопрос — почему в вашем плейлисте на Youtube такие неиформативные названия видео?
Скринdbelob Автор
16.03.2018 14:52Затрудняюсь ответить, AKogun47 показалось удобнее именовать «jug.msk.ru — DD/MM/YYYY — Part N».
Можете предложить Андрею, как было бы удобнее, например, по аналогии с видео JUG.ru:
- доклады «Встреча jug.msk.ru с <имя фамилия> — <наименование доклада>» или «<имя фамилия> — <наименование доклада>»
- плейлисты «jug.msk.ru-YYYY»
aragozin
Ещё раз хочу вас по благодарить за участие в мастер классе. Для мне было очень приятно увидеть такой интерес к теме с вашей стороны.
Как и обещал раскрываю секрет последнего кейса с мастер класса.
Вы могли заметить что в параметрах запуска JVM был параметер
-Dlogback.level.org.optaplanner=debug
. Логи пишутся в файлtarget/optaplanner.log
. Вы легко можете убедиться, что один запуск бенчмарка создаёт около 50 мегабайт лога (в консоль при этом печатаются сообщения с уровнем INFO и выше).При изменении параметра на
-Dlogback.level.org.optaplanner=info
время оптимизации модели на моей машине сократилось с 35.7 до 9.3 секунд.Mission Control не лучший инструмент для анализа подобного рода узких мест. Тем не менее, некоторые улики найти было можно.
“Длинный след” логгера на гистограмме горячих методов
На гистограмме ниже выделено несколько горячих. Каждая из них если раскрутить дерево вывода имеет отношение к легированию. В сумме выделенные строки уже дают 13.5%, что сопоставимо в временем работы наиболее горячих методов модели.
Активное использование исключений логгером
Во вкладке исключений мы видим не малое число
java.lang.Throwable
, которые растут из логгера.Файловые операции на таймлайне потока
Если посмотреть на таймлайн поток выполняющего оптимизацию, но плотно заполнен записью в файл. Заметьте что скриншот сделан с зумом в 650 миллисекунд.
Суммарное "чистое" время всех файловых операций всего 1.6 секунды (из 30 секунд записи), что само по себе. Однако большая плотность коротких IO операций обычно является поводом задуматься об их природе.
Все эти "улики" косвенные. Mission Control хорош тогда когда вы хорошо понимаете природу проблемы, которую вы хотите решить.
Почему же я выбрал этот кейс для мастер класса? Отчасти чтобы у вас был стимул испробовать все возможности Mission Control, a остановиться на первом скрине показавшем правильный результат. Отчасти чтобы показать как используя профйлер можно потерять лес за деревьями.