В 2016 году я потратил некоторое время на разбор некоторых вводных статей о jvm.Оглядываясь назад, некоторые из них не были полностью дополнены, в том числе о том, как использовать инструменты для мониторинга изменений производительности до и после настройки. Инструмент используется в качестве графического интерфейса для более интуитивного отображения проблем. С другой стороны, некоторый анализ, требующий высокой производительности (анализ файла дампа), как правило, не анализируется напрямую в производстве. Часто файлы дампа составляют около 1 ГБ, а эффективность ручного анализ относительно высок, поэтому использование инструментов для анализа проблем, связанных с jvm, может достичь мультипликативного эффекта с половиной усилий.
Инструменты мониторинга и анализа JVM обычно делятся на две категории: одна — это инструмент, поставляемый с jdk, а другая — сторонний инструмент анализа. Собственные инструменты JDK обычно находятся в каталоге jdk bin и могут быть использованы напрямую, щелкнув в виде exe.Включенные инструменты анализа уже очень мощные, охватывают почти все аспекты, но чаще всего мы используем только два: jconsole.exe и jvisualvm .exe; существует множество сторонних инструментов анализа, каждый из которых имеет свою направленность, более репрезентативную: MAT (Memory Analyzer Tool), GChisto и т. д.
Для крупномасштабных приложений JAVA трудно заблокировать все лазейки с помощью тонкого тестирования.Даже если мы проделали большую плодотворную работу на этапе тестирования, многие проблемы все равно будут выявлены в производственной среде, и их трудно устранить. решить проблемы в тестовой среде воспроизвести. JVM может записывать часть рабочего состояния системы при возникновении проблемы и сохранять ее в файле дампа кучи (Heap Dump), что обеспечивает нам важную основу для анализа и диагностики проблемы. Среди них VisualVM и MAT — аналитические инструменты для файлов дампа.
Инструменты, поставляемые с jdk
jconsole
Jconsole (Консоль мониторинга и управления Java) — это консоль мониторинга и управления Java, которая поставляется с JDK, начиная с java5. Она используется для мониторинга памяти, потоков и классов в JVM. Это мониторинг производительности графического интерфейса на основе JMX (расширение управления Java). инструмент. jconsole использует механизм расширения JVM для получения и отображения такой информации, как производительность и потребление ресурсов приложениями, работающими на виртуальной машине.
Щелкните jconsole.exe непосредственно в каталоге jdk/bin, чтобы запустить его. Интерфейс выглядит следующим образом:
Во всплывающем окне вы можете выбрать локальное приложение Java для мониторинга локального компьютера или выбрать удаленную службу Java для мониторинга.Если вы хотите отслеживать удаленную службу, вам нужно добавить следующий код в tomcat сценарий запуска:
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
После подключения вы можете увидеть обзор jconsole и основные функции: обзор, память, поток, класс, виртуальная машина, MBeans
-
В обзоре показано использование памяти кучи, количество активных потоков, загруженных классов и линейный график занятости ЦП в виде графиков, на которых можно наглядно наблюдать изменения во время выполнения программы.
-
Память, которая в основном показывает использование памяти. В то же время вы можете просмотреть сравнение значения изменения кучи и памяти без кучи. Вы также можете нажать, чтобы выполнить GC, чтобы наказать выполнение GC.
-
Поток, основной интерфейс отображает количество действий и пики количества потоков. В то же время вы можете щелкнуть поток в левом нижнем углу, чтобы просмотреть подробную информацию о потоке, например, в каком состоянии находится поток. , содержимое стека и т. д., и вы также можете нажать «Обнаружить тупик», чтобы проверить между потоками, есть ли тупиковая ситуация.
-
Class, который в основном отображает информацию о загруженных классах.
-
Обзор виртуальной машины, показывающий обзор всей информации JVM, включая базовую информацию, информацию о потоках, куче, операционной системе, параметрах виртуальной машины и т. д.
-
Mbean, просматривать свойства, методы и т. д. MBean.
VisualVM
Введение
VisualVM — это инструмент, предоставляющий визуальный интерфейс для просмотра сведений о приложениях на основе технологии Java (приложения Java), работающих на виртуальной машине Java (JVM). VisualVM упорядочивает данные, связанные с программным обеспечением JVM, полученные с помощью инструментов Java Development Kit (JDK), и предоставляет эту информацию таким образом, чтобы вы могли быстро просмотреть данные о нескольких приложениях Java. Вы можете просматривать данные о локальных приложениях, а также о приложениях, работающих на удаленных хостах. Кроме того, можно получить информацию о Данные экземпляра программного обеспечения JVM и сохраните эти данные в локальной системе для последующего просмотра или обмена с другими пользователями.
VisualVM — самый мощный инструмент настройки, поставляемый с javajdk, а также наиболее часто используемый мной инструмент настройки, и он включает почти все аспекты настройки jvm. Кроме того, дважды щелкните jvisualvm.exe в каталоге jdk/bin, чтобы использовать его.После запуска вы также можете выбрать локальный и удаленный, например jconsole.Если вам нужно контролировать удаленный, вам также необходимо настроить соответствующие параметры.Основной интерфейс следующее;
VisualVM может устанавливать различные подключаемые модули по мере необходимости.Каждый подключаемый модуль имеет разные функции.Некоторые в основном отслеживают сборщик мусора, некоторые в основном отслеживают память, а некоторые отслеживают потоки.
Как установить:
1. Выберите «Инструменты» > «Плагины» в главном меню. 2. На вкладке «Доступные плагины» установите флажок «Установить» для плагина. Щелкните Установить. 3. Шаг за шагом завершить процедуру установки плагина.
Здесь я беру Eclipse (pid 22296) в качестве примера. После двойного щелчка он будет развернут напрямую. Основной интерфейс отображает два основных содержимого системы и jvm. Щелкните параметры jvm и свойства системы в правом нижнем углу, чтобы обратиться к подробная информация о параметрах.
Поскольку плагинов для VisualVM слишком много, я в основном представлю здесь три из них: мониторинг, многопоточность, Visual GC.
Главная страница мониторинга — это фактически диаграмма процессора, памяти, класса, потока.
Между потоками и функциями jconsole нет большой разницы.
Visual GC — часто используемая функция, которая может четко видеть изменения памяти молодого и старого поколения, а также частоту gc и время gc.
На самом деле jconsole почти имеет вышеперечисленные функции.VisualVM более полный и интуитивный.Кроме того,VisualVM имеет много других функций,которые могут анализировать снэпшоты дампа памяти, снэпшоты дампа потока и анализировать их.Есть много других плагинов,которые вы можете проводить исследования.
Сторонние инструменты настройки
MAT
Что такое МАТ?
MAT (Memory Analyzer Tool), инструмент анализа памяти на основе Eclipse, — это быстрый, многофункциональный инструмент анализа кучи Java, который может помочь нам найти утечки памяти и сократить потребление памяти. Используйте инструмент анализа памяти для анализа из большого количества объектов, быстро вычисляйте размер объектов в памяти, смотрите, кто блокирует работу по переработке мусора, и визуально проверяйте возможные результаты через отчет Object.
Обычно анализ утечек памяти считается очень сложной задачей, обычно выполняемой старшими людьми в команде. Тем не менее, MAT (анализатор памяти Eclipse), который будет представлен, считается «тупым» инструментом анализа файлов дампа кучи, и вам нужно всего лишь щелкнуть мышью, чтобы создать профессиональный аналитический отчет. По сравнению с другими инструментами анализа утечек памяти, MAT очень прост в использовании и может выполняться одним щелчком мыши, даже новичок может быстро начать работу.
MAT устанавливается в виде подключаемого модуля eclipse. Конкретный процесс установки описываться не будет. Вы можете использовать команду visualvm или jmap для создания файла кучи и импортировать его в eclipse mat для создания отчета об анализе:
При создании этого отчета три html-файла результатов анализа (dump_Top_Consumers.zip, dump_Leak_Suspects.zip, dump_Top_Components.zip) будут созданы в каталоге того же уровня, что и файл дампа, который удобно отправить соответствующим коллегам для просмотра.
Необходимо обратить внимание на следующие области действий, отчетов и пошаговых действий:
-
Гистограмма: перечисляет объекты в памяти, количество и размер объектов, поддерживает поиск по регулярным выражениям, а также может вычислять сохраняемый размер всех объектов этого класса.
-
Dominator Tree: перечислите самые большие объекты и зависимые от них уцелевшие объекты (размер отсортирован по сохраненной куче)
-
Основные потребители: перечислите самые большие объекты графически
-
повторяющиеся классы: обнаружение классов, загруженных несколькими загрузчиками классов
-
Подозреваемые в утечке: анализ утечки памяти
-
Основные компоненты: список отчетов, которые составляют более 1 процента от общего количества кучи.
-
Отчет о компонентах: объекты анализа принадлежат одному пакету или загружаются одним и тем же загрузчиком классов.
Вышеупомянутое является лишь предварительным введением, у мата есть более мощные применения, такие как сравнение кучи памяти.В производственной среде для выявления проблем снимки памяти часто сбрасываются каждые несколько минут, а затем изменения в куче памяти в разное время сравниваются проблема найдена.
GChisto
GChisto — это профессиональный инструмент для анализа журналов сборщика мусора, которые можно анализировать с помощью журналов сборщика мусора: незначительная сборка мусора, время полной сборки мусора, частота и т. д., а также отображать ситуацию с сборкой мусора в различных формах, таких как списки, отчеты и диаграммы. Хотя интерфейс немного грубоват, но функция все еще хороша.
После настройки локальной среды jdk дважды щелкните GChisto.jar и нажмите «Добавить» во всплывающем окне ввода, чтобы выбрать журнал gc.log.
-
Статистика GC Pause: вы можете просмотреть количество GC, время GC, накладные расходы GC, максимальное время GC и минимальное время GC и т. д., а также соответствующую гистограмму.
-
Распределение пауз сборщика мусора: Просмотр подробного распределения пауз сборки мусора.Ось X представляет время паузы сборки мусора, а ось Y представляет количество пауз.
-
Временная шкала GC: отображает сборку мусора по всей временной шкале.
Однако этот инструмент больше не поддерживается и не может распознавать файлы журналов последней версии jdk.
gcviewer
GCViewer также является инструментом анализа, который используется для визуального просмотра журналов сборщиков мусора, созданных виртуальными Java-машинами Sun / Oracle, IBM, HP и BEA.Лично gcviewer считает, что отображаемый интерфейс более хаотичен и более профессионален, чем GChisto.
GC Easy
Это веб-инструмент, которым очень удобно пользоваться онлайн.
Адрес: http://gceasy.io
Зайдите на официальный сайт, загрузите упакованный zip или gz суффикс, и через некоторое время вы получите результаты анализа.
Этот инструмент рекомендуется для анализа gc.
Приближается сезон набора золотых девяток и серебряных десяток. Я хотел бы порекомендовать всем официальный аккаунт. Этот официальный аккаунт в основном продвигает контент, связанный с Java-интервью. Заинтересованные студенты могут обратить внимание.