Рубрики
Без рубрики

Как захватить дампы кучи Java? – 7 вариантов

Дампы кучи являются жизненно важными артефактами для диагностики проблем, связанных с памятью, таких как медленные утечки памяти, проблемы со сборкой мусора и java.lang. Ошибка памяти. Они также являются жизненно важными артефактами для оптимизации потребления памяти.

Автор оригинала: Ram Lakshmanan.

Дампы кучи являются жизненно важными артефактами для диагностики проблем, связанных с памятью, таких как медленные утечки памяти, проблемы со сборкой мусора и java.lang. Ошибка памяти. Они также являются жизненно важными артефактами для оптимизации потребления памяти.

Существуют отличные инструменты, такие как Eclipse MAT и Герой кучи для анализа свалок кучи. Однако вам необходимо предоставить этим инструментам дампы кучи, записанные в правильном формате и в правильный момент времени.

В этой статье вы найдете несколько вариантов захвата дампов кучи. Однако, на мой взгляд, первые 3 являются эффективными вариантами использования, а другие-хорошими вариантами, о которых следует знать.

1. jmap jmap выводит дампы кучи в указанное расположение файла. Этот инструмент упакован в JDK. Его можно найти в папке \bin.

Вот как вы должны вызвать карту:

jmap -dump:format=b,file=  

where
pid: is the Java Process Id, whose heap dump should be captured
file-path: is the file path where heap dump will be written in to.

Пример:

1 jmap,файл=/opt/tmp/heapdump.bin 37320

Примечание: Очень важно пройти “живой” вариант. Если этот параметр передан, то в файл дампа кучи записываются только живые объекты в памяти. Если этот параметр не передан, все объекты, даже те, которые готовы к сборке мусора, печатаются в файле дампа кучи. Это значительно увеличит размер файла дампа кучи. Это также сделает анализ утомительным. Для устранения неполадок с памятью или оптимизации памяти достаточно просто “живой” опции.

2. Ошибка в памяти Когда приложение работает на java.lang. Из-за ошибки памяти, идеально захватить дамп кучи прямо в этот момент, чтобы диагностировать проблему, потому что вы хотите знать, какие объекты находились в памяти и какой процент памяти они занимали, когда java.lang. Произошла ошибка памяти. Однако из-за жары момента, в большинстве случаев, ИТ/операционная группа забывает захватить дамп кучи. Мало того, они также перезапускают приложение. Чрезвычайно сложно диагностировать какие-либо проблемы с памятью без захвата дампов кучи в нужное время.

Вот где эта опция очень удобна. Когда вы передадите системное свойство ‘-XX:+HeapDumpOnOutOfMemoryError’ во время запуска приложения, JVM будет захватывать дампы кучи прямо в тот момент, когда JVM испытывает ошибку OutOfMemoryError.

Пример Использования:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tmp/heapdump.bin

Примечание: Захваченный дамп кучи будет напечатан в месте, указанном системным свойством ‘-XX:HeapDumpPath’.

Лучшая практика: Всегда сохраняйте это свойство настроенным во всех приложениях, так как вы никогда не знаете, когда произойдет ошибка OutOfMemoryError.jcmd3.

3. инструмент jcmd jcmd используется для отправки запросов диагностических команд в JVM. Он упакован как часть JDK. Его можно найти в папке \bin.

Вот как вы должны вызвать cmd:

jcmd  GC.heap_dump 
where
pid: is the Java Process Id, whose heap dump should be captured
file-path: is the file path where heap dump will be written in to.

Пример:

1 jcmd 37320 GC.heap_dump/opt/tmp/heapdump.бен

4. JVisualVM JVisualVM-это средство мониторинга и устранения неполадок, которое упаковано в JDK. Когда вы запускаете этот инструмент, вы можете видеть все процессы Java, запущенные на локальном компьютере. Вы также можете подключиться к процессу java, запущенному на удаленном компьютере, с помощью этого инструмента.

Шаги:

1.Запустите jvisualvm в папке \bin\ 2.Щелкните правой кнопкой мыши на одном из процессов Java 3.Выберите опцию “Дамп кучи” в раскрывающемся меню 4.Будет создан дамп кучи 5.Путь к файлу, в котором создается дамп кучи, будет указан на вкладке Сводка > Основная информация > раздел Файл

Инжир: Захват дампа кучи из JVisualVM

дамп кучи 1 (1).png

5. JMX Есть com.sun.управление:тип= Горячая диагностика MBean . У этого MBean есть операция “dumpHeap”. Вызов этой операции приведет к захвату дампа кучи. ‘ Операция dumpHeap’ принимает два входных параметра:

Выходной файл: Путь к файлу, в который должен быть записан дамп кучи жизнь: При передаче “true” захватываются только живые объекты в куче Вы можете использовать клиенты JMX, такие как JConsole, jmx , Управление полетом Java для вызова этой операции MBean.

Рис.: Использование Java Mission Control в качестве клиента JMX для создания дампа кучи

куча 2 (1).png

6. Программный подход Вместо использования инструментов вы также можете программно захватывать дампы кучи из приложения. Могут быть случаи, когда вы захотите захватить дампы кучи на основе определенных событий в приложении. Вот хорошая статья от Oracle , в которой приводится исходный код для захвата дампов кучи из приложения путем вызова компонента MBean JMX, который мы обсуждали в описанном выше подходе.

7. Административная консоль IBM Если ваше приложение запущено на IBM Websphere Application Server, вы можете использовать административную консоль для создания куч.

Шаги:

1.Запустите административную консоль 2.In в области навигации выберите Устранение неполадок > дампы и ядра Java 3.Выберите имя сервера, для которого вы хотите создать дамп кучи 4.Нажмите Дамп кучи, чтобы создать дамп кучи для указанного сервера

Вы также можете использовать wsadmin для создания дампов кучи.

Оригинал: “https://www.codementor.io/@suryab/how-to-capture-java-heap-dumps-7-options-v7mejmcpz”