Introduction
00:00:00Проблема с производительностью приложения Йоханнес Беберг рассказывает о задаче создания интерактивности для удаленных мероприятий и о том, как он разработал небольшой веб-сайт для решения этой проблемы. Однако во время мероприятия сервер был перегружен из-за высокого трафика и не мог обрабатывать множество подключений. Он подчеркивает цитату Дональда Кнута о том, что оптимизация является корнем всех зол, и представляет профилирование как инструмент для выявления проблем с производительностью.
Методы профилирования приложений Беберг объясняет, что профилирование похоже на раскрытие криминальных тайн путем изучения данных о производительности. Он описывает flame graphs как визуализацию данных о производительности, показывающую, как выявление неэффективных методов привело к резкому повышению производительности приложений. Беберг также делится своим опытом работы с профилями с открытым исходным кодом в команде SAP Submachine.
Survey results
00:08:38Спикер обсуждает важность профилирования при разработке программного обеспечения, подчеркивая, что 40% респондентов опроса не используют профилирование. Профилирование определяется как метод получения отчета о времени, затраченном на выполнение каждой процедуры программы.
What is profiling
00:09:38Существует два типа профилей: инструментальные профили и профили выборки. Инструментальные профили вставляют инструкции в код для отслеживания входа и выхода функции, но они могут увеличить размер кода и время выполнения. Профили выборки выполняют выборку JVM через регулярные промежутки времени для наблюдения за поведением программы, предоставляя приблизительные данные с некоторыми проблемами точности.
How does profiling work
00:14:26Профилирование работает путем сначала сбора всех доступных угроз, затем выбора случайного подмножества из-за непрактичности выборки всех угроз. Трассировки предварительно распределяются в структуре данных для хранения, а асинхронное профилирование включает в себя пингинг с уникальными сигналами. Существует два типа профилей выборки: внешние (собственные агенты или Java-агенты, подключенные к JVM) и встроенные (непосредственно интегрированные в JDK или другие JBMS). Синхронный метод используется такими инструментами, как VisualVM, основанный на Safe Point buys, в то время как асинхронные методы были введены для проекта F Analyzer.
How to obtain a profile
00:18:49Профилирование с помощью асинхронного профилировщика Async Profiler - это Java-агент, который можно использовать для получения профиля, указав такие параметры, как время процессора, время CL и формат экспорта. Он объединяет результаты параллельного JFR в JVM и обеспечивает преимущества выборки наряду с событиями из JDK Flight Recorder. Кроме того, он предлагает такие функции, как запуск событий выборки с использованием событий locks perf и инструментария метода.
Профилирование с помощью бортового самописца JDK (JFR) JDK Flight Recorder встроен в JDK и работает на всех платформах, включая Windows. Он поддерживает более 120 предопределенных событий, а также создание пользовательских событий для конкретных потребностей мониторинга приложений. Пользовательские события сеанса могут быть созданы для записи определенных данных во время вызовов API или других операций, которые затем можно просмотреть в пользовательских интерфейсах, поддерживающих события JFI.
Other tools
00:26:01Введение в инструменты профилирования Существуют различные инструменты для профилирования Java-приложений, включая Flame Graphs и JDK Mission Control. Эти инструменты предоставляют информацию о потреблении памяти, информацию о профилировании методов, данные о сборке мусора и многое другое. Кроме того, для IntelliJ IDEA разрабатывается новый плагин, который позволяет просматривать файлы JFR и запускать профилирование JFR в среде IDE.
Влияние профилирования на производительность Влияние использования Java Flight Recorder (JFR) на производительность в большинстве настроек относительно невелико. При уменьшенных настройках мониторинга накладные расходы обычно составляют менее 2%. При получении большего количества событий с меньшими интервалами выборки или включении опции JR sync для асинхронного профиля результаты с использованием JFR могут привести к накладным расходам от 3% до 10%.
Profilers
00:30:45Профилирование приложений с помощью профилировщиков может быть полезным, но важно помнить, что профили не всегда могут быть точными. Тестирование и отладка с помощью профилировщиков могут представлять проблемы, особенно в случаях сложных вызовов отражения.
Experimentation
00:33:30Чтобы работать лучше, используйте технику экспериментов, заимствованную из информатики, называемую профилированием GLP. Начните с создания приблизительной мысленной модели архитектуры программы и понимания больших библиотек, используемых в вашем приложении. Сформулируйте гипотезы на основе модели, затем оцените их с помощью тестового кода и профилирования для обновления или уточнения гипотезы. Этот процесс также помогает выявить внутренние проблемы во время профилирования.
Conclusion
00:36:07Методы профилирования необходимы для отладки и тестирования. Важно иметь такие инструменты, как Asing profile, JFR и понимание вариантов использования.