tags: java, troubleshooting, monitor,jvisualvm,jconsole
В одном предложении: собственные инструменты мониторинга jdk jconsole и jvisualvm могут более удобно и интуитивно отслеживать производительность приложений Java.Ниже поясняется, как их использовать.
1. Введение
В предыдущих статьях (см. «Полезные материалы» ниже) были представлены инструменты командной строки jdk, но они относительно неинтуитивны в использовании и, как правило, должны использоваться на компьютере. Есть ли более удобный и интуитивно понятный способ их использования? для мониторинга java-приложений? Фактически, сам jdk уже предоставляет инструменты с графическим интерфейсом для мониторинга Java, которыеjconsole
иjvisualvm
, функции и использование этих двух инструментов описаны ниже.
2 использование jconsole
jconsole — это встроенный анализатор производительности Java для jdk.Он расположен в каталоге bin каталога установки JDK.Под Windows его можно запустить из командной строки (jconsole.exe
) или дважды щелкните файл jconsole.exe, чтобы запустить его. Заинтересованные читатели могут обратиться к инструменту jconsole.Официальная документация:https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html
2.1 Два способа подключения
При запуске jconsole предоставляет два метода подключения, а именно подключение к локальному процессу и подключение к удаленному процессу. Он будет напрямую перечислять локальный процесс Java для выбора. Если вам нужно отслеживать удаленный процесс Java, проверьте удаленный процесс, а затем введите:. Это требует установки параметров удаленного подключения JMX при запуске удаленного процесса Java, иначе он не может быть подключен.Чтобы узнать о технологии удаленного подключения JMX, вы можете обратиться кофициальная статья(https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html
) параметры следующие:
# 需要监控的服务器IP
-Djava.rmi.server.hostname=192.168.222.10
# 提供监控的java进程端口
-Dcom.sun.management.jmxremote.port=9004
# 指定后续的通讯端口,与上面一致
-Dcom.sun.management.jmxremote.rmi.port=9004
# 不使用ssl登录,若有安全需求,可设置
-Dcom.sun.management.jmxremote.ssl=false
# 不验证,若有安全需求,可设置
-Dcom.sun.management.jmxremote.authenticate=false
Как показано ниже:
Обратите внимание, что, поскольку не используетсяssl
, появится сообщение «Небезопасное соединение», просто нажмите на него.
2.2 Использование функции jconsole
После запуска и подключения java-процесса интерфейс jconsole относительно прост, разделен на 6 модулей:
- Обзор: общий обзор процесса Java, включая кучу, количество потоков, класс, линейный график изменений использования ЦП.
- Память: отображение информации об использовании кучи и некучи памяти, аналогично jmap и jstat.
- Поток: отображение информации об использовании потока, аналогично jstack.
- class: показать информацию о загрузке класса
- Сводка по виртуальной машине: отображает информацию о JVM, аналогичную jinfo.
- MBeans: отображение информации о MBeans (используется реже)
2.2.1 Обзор
В обзоре в основном отображается линейный график изменений в куче, количестве потоков, классе и использовании ЦП. По сути, вы можете просмотреть обзор приложения непосредственно на основе линейного графика. Если куча занимает много памяти, много активных потоков и уровень загрузки ЦП очень высок, вы можете напрямую перейти в соответствующую область, чтобы увидеть подробности, чтобы найти причину. Кроме того, щелкните правой кнопкой мыши соответствующий график, чтобы экспортировать данные в файл csv для анализа. Как показано на рисунке:
2.2.2 Память
Память является ключевой областью нашего мониторинга.Вы можете ссылаться на память кучи, память без кучи, состояние пула памяти, время и время GC, а также вы можете вручную выполнить GC для просмотра изменений памяти. Как показано ниже:
Среди них вы можете выбрать, какие изменения памяти (куча, не куча, старая область, область eden, оставшаяся область, область метапространства и т. д.) для просмотра в верхней части графика, или вы можете вручную выполнить GC для просмотра изменений . Под рисунком отображаются объем памяти и размер использования, количество сборщиков мусора и время использования, а изменения кучи и не кучи отображаются в виде гистограммы. Поэтому для проблем переполнения памяти и OOM данные мониторинга здесь очень подходят.
2.2.3 Поток
Для онлайн-приложений основными причинами длительной паузы потоков являются: ожидание внешних ресурсов (подключения к базе данных, сетевые ресурсы, ресурсы устройства и т. д.) Источник и т. д.), бесконечный цикл, ожидание блокировки (живая блокировка и взаимоблокировка), все они должны отслеживать статус выполнения потока приложения Java, как показано ниже:
Измените количество потоков и нажмите на поток, чтобы просмотреть статус выполнения для анализа.Вы также можете нажать функцию «Обнаружение взаимоблокировки», чтобы решить проблемы взаимоблокировки.
2.2.4 Классы
Эта функция в основном используется для проверки общего количества загруженных классов.Если загруженные классы увеличиваются, вы должны проверить, есть ли в коде код, который постоянно генерирует классы. Как показано ниже:
2.2.5 Обзор ВМ
Когда мы добавляем параметры запуска в java-приложение (JAVA_OPTS
), если вы хотите проверить фактическое использование этого приложения в Интернете и вступают ли в силу параметры, мы используем jinfo для инструмента командной строки, который можно увидеть прямо здесь, и включает системную информацию, информацию о классе, информацию о куче и связанную с ней виртуальную машину. параметры . Как показано ниже:
3 использование jvisualvm
иjconsole
Точно так же jdk также предоставляет в каталоге binjvisualvm
инструменты, условно говоря,jvisualvm
Еще более мощный, под Windows его можно запустить из командной строки (jvisualvm.exe
) или дважды щелкните напрямуюjvisualvm.exe
Начать бежать. Заинтересованные читатели могут обратиться кjvisualvm
инструментОфициальная документация:https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html
3.1 Два способа подключения
иjconsole
Такой же,jvisualvm
Вы можете отслеживать локальный процесс Java, вы также можете отслеживать удаленный процесс Java. Локальный процесс можно выбрать напрямую, а удаленному процессу также необходимо добавить параметры запуска JMX в процесс java.
3.2 Использование функции jvisualvm
Функции jvisualvm относительно мощные, в основном это следующие функции:
- Отображает процессы виртуальной машины, их конфигурацию и информацию о среде (jps, jinfo).
- Мониторинг ЦП приложения, GC, кучи, области методов (1.7 и более ранние версии), метапространства (JDK1.8 и более поздние версии) и информации о потоках, эквивалентной jmap, jstat, jstack.
- дамп и анализ моментальных снимков дампа кучи (jmap, jhat).
- Анализ производительности выполнения программы на уровне методов, чтобы найти методы, которые вызываются чаще всего и выполняются дольше всего.
- Моментальный снимок программы в автономном режиме: сбор конфигурации времени выполнения, дампа потока, дампа памяти и другой информации о программе для создания моментального снимка.
Функции интерфейса в основном разделены на несколько модулей, а именно: обзор, мониторинг, поток и сэмплер.
3.2.1 Обзор
Обзор представляет собой инструмент командной строки Java.jps
иjinfo
, который может отображать процесс и его конфигурацию, свойства системы, параметры запуска и т. д., иjconsole
«Профиль VM» почти такой же. Как показано ниже:
3.2.2 Мониторинг
Эта функция эквивалентнаjconsole
Функция «Обзор» также представляет собой графический способ отображения ЦП, изменений кучи, изменений номера потока и классов загрузки, но у нее есть функция, которая может удаленно создавать снимки дампа кучи (эквивалентноjmap -dump:file=./heap.hprof PID
), место хранения файла будет выбрано при создании дампа.
Выгруженный снимок кучи, мы можем вручную загрузить файл, а затем использовать его функцию «загрузить снимок», чтобы загрузить его вjvisualvm
(При загрузке вам нужно выбрать тип файла «hprof») и дополнительно проанализировать ситуацию с памятью в куче. После загрузки он будет включать общую информацию, использование памяти классами и экземплярами, и дважды щелкните класс, чтобы увидеть конкретное количество экземпляров.Если вы обнаружите, что экземпляров некоторых классов много или занятая память относительно высокий, вы можете знать проблему. Следующее:
3.2.3 Поток
Эта функция эквивалентнаjconsole
Он графически отображает текущее состояние и время выполнения каждого потока, а также может выполнять удаленный дамп потока.jstack -l
функция, после выхода дампа она сразу отображается в интерфейсе. следующее:
3.2.4 Сэмплер
пробоотборникjvisualvm
Уникальная функция ЦП и памяти может быть сэмплирована и отображена, а информация о памяти и потоке может отображаться через равные промежутки времени (класс занятой памяти и т. д.), а также предоставляет функции для выполнения GC, дампа памяти и дампа потока. . следующее:
4 Резюме
имеютjconsole
иjvisualvm
Два инструмента визуализации могут сократить ввод командной строки и контролировать память, потоки, ЦП и другую информацию приложений Java более удобным и интуитивно понятным способом.Они являются хорошими помощниками для решения онлайн-проблем Java. Однако следует отметить, что прежде чем использовать эти два инструмента, нам все же необходимо иметь определенный набор знаний о JVM, механизме запуска Java-программ, потоках и т. д. Надеюсь, эта статья будет полезна для всех вас.
Информация о параметрах
-
официальная документация jconsole:
https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html
-
официальная документация jvisualvm:
https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html
-
документация jvisualvm:
https://visualvm.github.io/documentation.html
-
Технология удаленного мониторинга JMX:
https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html
-
Образец кода адреса:
https://github.com/mianshenglee/my-example/tree/master/java-monitor-example
Связанное Чтение
- мониторинг java-приложений (1) — технология мониторинга приложений, которую должны знать java-программисты
- мониторинг java-приложений (2) - секрет java-команды
- мониторинг приложений Java (3) — освоили ли вы эти инструменты командной строки
- Мониторинг Java-приложений (4) — онлайн-процедуры устранения неполадок