производительности Java-программ с
применением YourKit Java Profiler”
Докладчик:
Антон Катилин
создатель YourKit Java Profiler
Проблемы производительности:
●
Программа работает медленно
●
Программа потребляет много памяти и/или
происходят утечки памяти
http://www.yourkit.com
●
Java 1.3, 1.4, 5.0
●
J2SE, J2EE - версия 3
J2ME - версия 4
●
Windows, Linux, Solaris SPARC - версия 3
Mac OS X, Solaris PC - версия 4
Как устроен профайлер:
●
Агент
●
Клиент с пользовательским интерфейсом
●
API для автоматизации профилирования
Агент:
●
Библиотека (dll, so), написана на C/C++
●
Загружается при старте VM
●
Взаимодействует с VM с использованием
протоколов:
JVMPI (до Java 5.0 включительно)
и JVMTI (начиная с Java 5.0)
●
Управляется извне через сокет
●
Сохраняет результаты в файл (снепшоты)
Клиент:
●
Взаимодействие с агентом: переключение
режимов профилирования, запись результатов
измерений в файл (получение снепшотов)
●
Визуализация результатов профилирования
2 группы задач:
●
профилирование памяти
●
профилирование CPU
Вопрос:
●
Аварийное завершение программы или ее
дальнейшая нестабильная работа
●
Возможна потеря результатов работы и/или
повреждение файлов данных
Причина 2:
●
Общее снижение производительности системы
Причина 3
●
Обнаружение и локализация утечек памяти
●
Выявление "жадных" подсистем
●
Поиск кода, порождающего много временных
объектов
Что такое memory leak в Java?
●
Автоматически уничтожаются объекты, не
доступные из GC roots
●
Объекты могут оставаться доступными по
ссылкам, потому что программист забыл
убрать на них ссылки
Утечки памяти не могут быть обнаружены
полностью автоматически
●
Сборка мусора – формальный алгоритм
●
Memory leak – понятие семантическое
Пример memory leak:
●
Компонент класса Application
●
Компоненты класса Project
●
Application хранит список обработчиков
событий, каждый из которых имеет ссылку на
объект
●
Если обработчик не удаляется из списка,
Project не может быть собран
О слежении за созданием объектов (Allocation
recording)
●
Замедляет профилируемую программу
●
Полученные данные бесполезны для решения
задачи 1 и 2: не важно "где" создан объект,
важно "почему" он существует, т.е. какими
ссылками он удерживается
●
В YourKit Java Profiler allocation recording -
опция, по умолчанию выключенная
●
С агентом YourKit Java Profiler можно
запустить любую программу без потери
производительности, получив возможность
профилировать память при возникновении
необходимости
●
Как найти и устранить утечку памяти:
●
-Xrunyjpagent в командной строке
●
Запуск из IDE
●
Интеграция с J2EE сервером
●
Как найти и устранить утечку памяти:
●
F7
Вопрос:
●
Статистика по пакетам и классам
●
Деление по пакетам зачастую отражает
деление по подсистемам
package = subsystem
●
Получем достаточно представительную оценку
распределения занимаемой памяти
Таким образом, YourKit Java Profiler позволяет
находить утечки памяти и анализировать
потребление памяти в реально работающих
системах, с реальными нагрузками.
Поиск кода, порождающего много временных
объектов (Excessive garbage allocation)
●
Allocation recording включается только на
необходимый период времени, все остальное
время программы работает с полной скоростью
●
Анализ hot spots и call trees методов,
порождавших временные объекты
●
Если снепшот получен со включенным
allocation recording, можно анализировать
распределение объектов (hot spots, call trees) по
местам их создания в коде
Профилирование CPU
●
2 метода профилирования:
sampling
tracing
●
включается/выключается явно - возможно
профилирование реально работающих систем
●
понятие снепшота
Sampling:
●
периодически (десятки раз в секунду)
опрашиваются стеки всех ниток
●
с учетом интервалов между опросами
оценивается проведенное в методах время
●
замеряются времена входа и выхода в метод
●
Hot Spots
●
Call Trees (by thread, threads together)
●
про каждый конкретный метод можно узнать:
- merged callees
- back traces
- invocation points
●
Hot Spots
●
Call Trees (by threads, all threads together)
Про каждый конкретный метод можно узнать:
●
Merged callees
Про каждый конкретный метод можно узнать:
●
Back traces
Про каждый конкретный метод можно узнать:
●
Invocation points
Прочие полезные особенности YourKit Java
Profiler
Интерфейс
●
Уделяется большое внимание
●
Удобство работы с клавиатуры
●
Swing
Фильтрация: деление на "интересные" и
"неинтересные" методы
java.lang.*, javax.swing.*
●
другие профайлеры: задание фильтров перед
измерением
●
YourKit Java Profiler: фильтр - понятие
пользовательского интерфейса
Плюсы подхода YourKit Java Profiler:
●
от человека не требуется принимать решение
заранее
●
человек имеет возможность передумать
●
как результат, экономится время и усилия
человека
Архитектура “агент” - “клиент” естественным
образом обеспечивает возможность
профилирования как локальных, так и
удаленных приложений
●
Профилирование серверов под реальной
нагрузкой
●
Автоматизированное конфигурирование ряда
серверов:
Задачи:
●
Запуск профилируемой программы
●
Доступ к исходному тексту профилируемой
программы
Особенности интеграции YourKit Java Profiler с
IDE
●
Плагин к IDE (IntelliJ IDEA, Eclipse, JBuilder,
JDeveloper)
●
Запуск приложения, задание параметров
●
Профайлер – самостоятельная программа
(standalone profiler UI)
●
Навигация к коду в редакторе IDE
Некоторые ближайшие планы:
●
“Wall” и “CPU times”
●
J2ME
●
Поддержка платформ: Mac OS X, Solaris PC
●
NetBeans
●
динамическая информация
●
.Net
Контакты
Anton Katilin
anton@yourkit.com