Заглавное изображение взято из Астрономической картинки дня.
Выполнение анализа памяти JVM может помочь устранить существующие и потенциальные проблемы.
Используя общие инструменты, поставляемые с jdk, вы можете проанализировать возможные места проблем и определить направления оптимизации.
Анализ памяти JVM имеет много преимуществ.
Эта статья будет пройдена один разjvmПроцесс анализа памяти для иллюстрацииjps
、jcmd
、jstat
、jstack
и jmap
Как использовать инструмент.
В этой статье используется версия JDK17.
когда необходимо JVM Анализируя память, используйте ее в сочетании с jps
、jcmd
、jstat
、jstack
и jmap
Предоставляется полная диагностическая информация.
Вот общие шаги:
использовать jps
Проверять Java процесс PID:
jps -l
Здесь будут перечислены все Java процесс PID и Имя основного класса。
использовать jcmd
выполнить несколько диагностических команд:
jcmd <PID> VM.flags
jcmd <PID> VM.system_properties
Эти команды могут отображать JVM Параметры запуска и свойства системы, которые помогут понять JVM конфигурация.
использовать jstat монитор памяти JVM и статус сборки мусора:
jstat -gc <PID> 5000 10
Это будет постоянно выводить JVM Ситуация со сбором мусора, включая ситуацию использования каждой области кучи, GC Время и т. д.
использовать jstack
Генерация информации о стеке потоков:
jstack <PID>
Проверять информацию о стеке потоков, чтобы проверить наличие взаимоблокировок или других проблем, связанных с потоками.
использовать jmap
Создать файл дампа кучи:
jmap -dump:file=heapdump.hprof <PID>
Это создаст файл с именем heapdump.hprof
Файл дампа кучи,Может использоваться для дальнейшего анализа ситуации с памятью.,Найдите такие проблемы, как утечки памяти.
Анализ файла дампа кучи:
использовать Такие инструменты, как Eclipse Memory Analyzer (MAT) или VisualVM Анализ созданного файла дампа кучи на предмет обнаружения таких проблем, как утечки памяти, большие и бесполезные объекты.
путем объединенияиспользоватьэти инструменты,могу полностью понять JVM Статус выполнения, диагностика проблем с производительностью и устранение ошибок, связанных с памятью.
Способы использования инструмента подробно описаны ниже.
jps
да JDK Предоставленный для листинга Java Инструмент командной строки для обработки виртуальной машины. Обычно используется для проверки, работающей в данный момент в системе. Java процесс PID (идентификатор процесса) и соответствующее имя основного класса.
Ниже да jps
использовать метод команды:
илииспользоватьps -ef|grep java
Вы также можете выполнить поиск соответствующего pid.
jps [ options ] [ hostid ]
в,options
данекоторые необязательные параметры,hostid
да Необязательный идентификатор хоста. Обычно Используемые опции включают в себя:
-q
:толькопоказыватьпроцесс PID, соответствующее имя основного класса не отображается.-m
:показыватьперешел в основной класспараметры.-l
:показывать Полное имя основного класса.,Часто используется для обозначения конкретного приложения Java.-v
:показыватьперешел к JVM параметры.Например, чтобы отобразить все Java процесс PID Соответствующее имя основного класса можно запустить напрямую jps
Заказ:
jps
Если вы хотите показать только PID,Можетиспользовать -q
Параметры:
jps -q
Чтобы получить полное имя основного класса, вы можете использовать -l
Параметры:
jps -l
Если вы хотите отобразить пропуск Параметры основного класса можно использовать -m
Параметры:
jps -m
Если вы хотите отобразить пропуск к JVM Параметры, можно использовать -v
Параметры:
jps -v
jcmd:jcmd Команда да Java 8 Новая команда может выполнять различные JVM Задачи мониторинга и диагностики. Например, вы можете jcmd <pid> VM.flags
Проверять JVM Параметры запуска, илииспользовать jcmd <pid> Thread.print
Вывести информацию о стеке потоков.
Ниже да jcmd
Основной метод команды:
jcmd <PID | main class> <command> [options]
в:
<PID | main class>
:Быть оперированным Java процесс PID (идентификатор процесса) или имя основного класса. если предлагает PID, затем напрямую управляйте соответствующим Java процесс;если предоставляет имя основного класса, то jcmd
попробую найти совпадение Java обработать и выполнить соответствующие команды.<command>
:диагностическая команда для выполнения。[options]
:Необязательные параметры команды。Обычно используется jcmd
Команды включают в себя:
jcmd
Список поддерживаемых команд с кратким описанием каждой команды.Например, если вы хотите распечатать указанный Java Информация о стеке потоков процесса,Можетиспользоватьниже Заказ:
jcmd <PID> Thread.print
Если Чтобы выполнить сборку мусора, вы можете сделать следующее:
jcmd <PID> GC.run
Если вы хотите сгенерировать Java Файл дампа кучи,Можетиспользоватьниже Заказ:
jcmd <PID> GC.heap_dump <filename>
jstat:jstat Команда может контролировать JVM Память, сбор мусора и т.д. Например, вы можете jstat -gc <pid>
Проверить Статистика сбора мусора,илииспользовать jstat -gcutil <pid>
Проверить статистику сбора мусора и ситуацию с использованием памяти.
Ниже да jstat
Основной метод использования:
jstat [ options ] <PID> [ interval [ count ] ]
в:
[ options ]
:Дополнительные параметры команды,Используется для указания типа и формата данных, которые будут отображаться.<PID>
:хотетьмониториз Java процесс PID (идентификатор процесса).[ interval ]
:Дополнительные параметры,Указывает интервал времени (в миллисекундах), через который выводится статистика. если опущено,По умолчанию — один раз в секунду.[ count ]
:Дополнительные параметры,Указывает количество раз вывода статистики. если опущено,По умолчанию — неограниченный вывод.Обычно используется jstat
Опции команды включают в себя:
Например,Чтобы проверить статус загрузки класса Java-процесса,Можетиспользоватьниже Заказ:
jstat -class <PID>
Если вы хотите, чтобы каждый 5 Информация о загрузке выходного класса один раз в секунду, общий вывод 10 Второсортный,Можетиспользоватьниже Заказ:
jstat -class <PID> 5000 10
jstat может только проверять текущую информацию о сборщике мусора.,ПроверятьgcЖурналы больше подходят для онлайн-сред.изупражнятьсядапри запускеJVMДобавлено, когда-XX:+PrintGCDetails -Xloggc:/path/to/gc.log
(JDK1.8ниже)или-Xlog:gc*:file=/path/to/gc.log
(JDK9+)параметр,Поместите файл журнала gc с ограничением в GCViewer и GCeasy (требуется регистрация) для анализа.
jstack:jstack команда для генерации Java Снимки дампа потока можно использовать для анализа состояния потока, взаимоблокировок и других проблем. Например, вы можете jstack <pid>
Распечатать информацию о стеке потоков илииспользовать jstack -l <pid>
Распечатать информацию о стеке потоков и заблокировать информацию.
Ниже да jstack
Основной метод команды:
jstack [ options ] <PID>
в:
[ options ]
:Дополнительные параметры команды,Используется для указания формата вывода и т. д.<PID>
:хотеть Генерация информации о стеке потоковиз Java процесс PID (идентификатор процесса).Обычно используется jstack
Опции команды включают в себя:
Например, чтобы сгенерировать указанный Java Информация о стеке потоков процесса,Можетиспользоватьниже Заказ:
jstack <PID>
Если вы хотите вывести информацию о стеке потоков в формате длинного списка, вы можете использовать -l
Параметры:
jstack -l <PID>
если Java процесс не отвечает, можно использовать -F
Вариант принудительного исполнения информацию о стеке потоков:
jstack -F <PID>
Исключение не произошло. Код исключения местоположения.,нуждатьсяхотетьпроходитьjmap
генерироватьdumpдокумент。
Затем импортируйте его в MAT для анализа. да Создать файл дампа Шаги для кучи:
jps
Команда Проверять выполняется Java процесс и его PID。jmap
Заказ Создать файл дампа кучи. Формат команды следующий:jmap -dump:file=<документпуть> <PID>
Например, чтобы создать файл с именем heapdump.hprof
Для файла дампа кучи вы можете выполнить следующее:
jmap -dump:file=heapdump.hprof <PID>
Это создаст файл с именем heapdump.hprof
Файл дампа кучи.
File -> Open Heap Dump
,Затем выберите Файл дампа кучи.проходить这些步骤Может Руководство Создать файл дампа кучиииспользовать MAT провести анализ, даже если нет OutOfMemoryError Автоматическое создание файла дампа кучи при его возникновении также может помочь вам обнаружить проблему.
Больше подходит для онлайн-средыизупражнятьсядапри запускеJVMДобавлено, когда-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof
параметр,Таким образом, когда возникает OutOfMemoryError,JVM автоматически создаст файл дампа кучи。
Исследование и практика девяти, фронтового программиста полного стека, продолжаются.