В этой статье я расскажу о том, что такое Java Mission Control и чем он может помочь.
Начиная с 7u40 в составе Oracle JDK появился GUI инструмент для реалтайм мониторинга и профилирования JVM. Он позволяет собрать очень много информации о JVM процессе, найти узкие места и проблемы, которые влияют на производительность.
С точки зрения пользователя, вы запускаете ваше Java приложение, включаете запись событий, ждете фиксированное время пока события записываются и затем проводите анализ собранных данных.
Mission Control включает в себя JMX консоль и Java Flight Recorder (JFR). С помощью JMX осуществяется взаимодействие с удаленным Java процессом, а JFR собирает данные о событиях.
По умолчанию JMX и JFR выключены в Oracle JVM. Для их включения при запуске вашего Java приложения добавьте следущие параметры:
Начиная с 7u40 в составе Oracle JDK появился GUI инструмент для реалтайм мониторинга и профилирования JVM. Он позволяет собрать очень много информации о JVM процессе, найти узкие места и проблемы, которые влияют на производительность.
С точки зрения пользователя, вы запускаете ваше Java приложение, включаете запись событий, ждете фиксированное время пока события записываются и затем проводите анализ собранных данных.
Mission Control включает в себя JMX консоль и Java Flight Recorder (JFR). С помощью JMX осуществяется взаимодействие с удаленным Java процессом, а JFR собирает данные о событиях.
По умолчанию JMX и JFR выключены в Oracle JVM. Для их включения при запуске вашего Java приложения добавьте следущие параметры:
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
Пример запуска JAR файла с этими параметрами:
$ java -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8888 \ -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false \ -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -jar application.jar
После запуска приложения попробуем подключиться к нему с помощью JMC.
Запускаем GUI (набрать в консоле
jmc
), создаем новое подкючение к JVM, указываем настройки подключения к удаленному серверу:Включаем запись событий, указываем сколько времени будем собирать данные, одной минуты вполне дотаточно:
Если вы профилируете веб приложение, в момент записи событий имеет смысл нагрузить его HTTP запросами. Можно использовать в продакшене, т.к. запись событий почти не скажется на производительности самого приложения. Для примера я буду эмулировать нагрузку с помощью утилиты siege.
$ siege -b -c10 -t1m "http://138.102.22.11:9999 POST < request.txt"
Ждем минуту и смотрим информацию о событиях в приложении.
Стартовый экран
Память
Сборщик мусора
Дерево вызова методов
Более подробнее о том, как мне с помощью Java Mission Control удалось найти проблемные места одного сервиса, увеличить его производительность и сократить количество серверов приложения в 2 раза я постараюсь написать в следущих постах.
Важно! Не используйте JMC без авторизации на продакшен серверах. Кроме того лицензия Oracle разрешает бесплатное использование утилитой только для разработки.
Полезные ссылки:
- https://www.prosysopc.com/blog/using-java-mission-control-for-performance-monitoring/
- http://blog.takipi.com/oracle-java-mission-control-the-ultimate-guide/
Комментариев нет:
Отправить комментарий