?

Log in

No account? Create an account

elizarov


Блог Романа Елизарова


Previous Entry Share Next Entry
Конференция Joker и свежая версия Aprof
elizarov

Во вторник, 21 Октября, я буду выступать в Санкт-Петербурге с докладом на конференции Joker. И буквально на этой неделе я снова столкнулся с темой доклада напрямую. А тема такая. Очень часто проблемы производительности реальных Java приложений под нагрузкой происходят из-за слишком большого количества генерируемого при работе мусора в памяти. Доклад называется "Почему GC съедает все моё CPU?". На нем я как раз об этом и расскажу со всеми подробностями. Акцентирую вниманеие в чем отличие в этом плане Java от других языков типа С/C++. Вот вам спойлер: неэффективный код одинаково легко написать на любом языке, но методики поиска проблем имеют свои специфики. А на Java мы пишем очень, очень большие приложения и когда они начинают тормозить, то для поиска в них узких мест без специальных инструментов не обойтись. Вот, например, на открытии торгов в одном из компонентов системы более 30% CPU уходит на сборку мусора. Как найти виновника?

Львиная доля доклада как раз будет посвящена инструменту, который мы, в Devexperts, разработали для поиска проблем с излишним мусором — Aprof. Я его уже упоминал в других докладах: в DIY Java Profiling в 2011 году он явно упоминался, а в Миллионах котировок в секунду он проскакивал, так как без контроля за выделением памяти действительно высокопроизводительную систему просто не сделать. Наконец-то я раскрою эту тему в полной мере. Расскажу как пользоваться Aprof-ом и как интерпретировать полученные результаты. Объясню как он устроен, что же именно он замеряет, как он это делает, и какой эффект на производительность целевого приложения это оказывает. Не обойду вниманием и связанные со всей этой темой фишки HotSpot — его умение выделять объекты на стеке устранять выделение памяти под объекты.

В процессе подготовки доклада я навел порядок и в исходниках самого Aprof-а. Они получили место постоянной прописки на GitHub по адресу https://github.com/devexperts/aprof (безусловно, их копия живет и в нашем корпоративном git репозитории). Обновил используемую версию ASM до 5.0.3. Теперь поддерживается Java 8. Выпустил свежий релиз Aprof. Теперь последнюю версию можно скачать с Bintray:

UPDATE: Тут читатели меня правильно поправляют, что некорректно говорить о том, что HotSpot умеет выделять объекты на стеке. Он вообще устраняет выделение памяти под объекты, если есть такая возможность.

UPDATE2: Слайды с доклада


  • 1
значит, конференция полезна не только слушателям, но и докладчикам :)

Безусловно. Спасибо организаторам, что мотивируете на подвиги.

Роман, а существует где-нибудь опубликованная академическая статья, описывающая Aprof?

Так там же нет ничего академического. Манипулирование байткодом и аккуратный подсчет всего. Чисто инженерная задачка.

Вы же даете и частичный stack trace/call context, где происходят аллокации. А на тему получения call context в профилировании написано очень много. Правда мало чего хорошего :(

Спасибо за слайды, пойду читать код :)

О как. Меня эта тема, с академической точки зрения, никогда не интересовала. Вообще ни одной работы на эти темы не видел и не читал. Если там все-таки есть что-нибудь хорошее или просто любопытное, то киньте, пожалуйста, ссылочки. Почитаю на досуге.

Я как раз для семинара в универе готовлю обзор литературы. Если интересно, то через месяц смогу скинуть :)

  • 1