Вопрос по java, jmap – Как проанализировать дамп кучи с помощью jmap в Java

53

Я создаю дамп кучи с помощью команды ниже:

jmap -dump:file=DumpFile.txt <process-id>

Я открыл сгенерированный файл - DumpFile.txt, но он не в удобочитаемом формате. Поэтому, пожалуйста, дайте мне знать, как анализировать данные в сгенерированном файле.

Ты пробовалаjmap -heap <process-id> > DumpFile.txt? Felix Reckers
этот файл прекрасно открывается в Eclipse MAT, просто дайте ему расширение .hprof iTake
Смотрите такжеstackoverflow.com/questions/185893/... rogerdpack

Ваш Ответ

6   ответов
51

jmap -heap:format=b <process-id> без каких-либо путей. Таким образом, он создает файл * .bin, который вы можете открытьjvisualvm.exe (тот же путь, что и в Jmap). Это отличный инструмент для открытия таких файлов дампа.

Начиная с JDK 9, Visual VM не будет включен в Oracle JDK. Разработчики, которые хотели бы использовать Visual VM с Oracle JDK 9 или более поздней версии, могут получить его с сайта проекта с открытым исходным кодом Visual VM. Abdullah Khan
Обратите внимание, что вам нужноFile > Load... дамп кучи (это не дамп ядра). Видеть:stackoverflow.com/a/37791314/320220 beerbajay
10

чтобы ответить на это, но стоит взглянуть на это. Нужно всего 2 минуты, чтобы разобраться в деталях.

Сначала создайте эту Java-программу

import java.util.ArrayList;
import java.util.List;

public class GarbageCollectionAnalysisExample{
    public static void main(String[] args) {
           List<String> l = new ArrayList<String>();
           for (int i = 0; i < 100000000; i++) {
                  l = new ArrayList<String>(); //Memory leak
                  System.out.println(l);
           }
           System.out.println("Done");
    }
}

использованиеJPS найти vmid (идентификатор виртуальной машины, т.е. идентификатор JVM)

Перейдите в CMD и введите ниже команды>

C:\>jps
18588 Jps
17252 GarbageCollectionAnalysisExample
16048
2084 Main

17252 - это то, что нам нужно.

Теперь мы научимся использовать jmap и jhat.

Используйте jmap - для создания дампа кучи

Из документации java о jmap «jmap печатает карты памяти совместно используемых объектов или детали памяти кучи для данного процесса или файла ядра или удаленного сервера отладки»

Используйте следующую команду для создания дампа кучи>

C:\>jmap -dump:file=E:\heapDump.jmap 17252
Dumping heap to E:\heapDump.jmap ...
Heap dump file created

Где 17252 - vmid (выбрано сверху).

Дамп кучи будет создан в E: \ heapDump.jmap

Теперь используйте JhatJhat используется для анализа свалки мусора в Java -

C:\>jhat E:\heapDump.jmap
Reading from E:\heapDump.jmap...
Dump file created Mon Nov 07 23:59:19 IST 2016
Snapshot read, resolving...
Resolving 241865 objects...
Chasing references, expect 48 dots................................................
Eliminating duplicate references................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

По умолчанию он запускает http-сервер на порту 7000. Затем мы перейдем кHTTP: // локальный: 7000 /

Вежливость:JMAP, Как отслеживать и анализировать сборку мусора 10 способами

9

я бы порекомендовал отличный плагин Eclipseанализатор памяти

Другой вариант - использовать JVisualVM, он также может читать (и создавать) дампы кучи и поставляется с каждым JDK. Вы можете найти его в каталоге bin вашего JDK.

Спасибо, я загружаю программное обеспечение для анализа проблемы. Chaitanya
5

ложений VisualVM Mac (dmg) как отдельное приложение, чтобы компенсировать это.

0

jprofiler, jhat возможны варианты. Поскольку Jhat поставляется с JDK, вы можете легко запустить его, чтобы сделать базовый анализ.Проверь это

35

Вы можете использоватьjhat (Java Heap Analysis Tool) для чтения сгенерированного файла:

jhat [ options ] <heap-dump-file>

Команда jhat анализирует файл дампа кучи Java и запускает веб-сервер. Jhat позволяет просматривать дампы кучи с помощью вашего любимого веб-браузера.

Обратите внимание, что вы должны иметьhprof вывод в двоичном формате для возможности его анализаjhat, Вы можете использоватьformat=b возможность генерировать дамп в этом формате.

-dump:format=b,file=<filename>
Попробуй свалить сformat=b вариант как этот:jmap -dump:format=b,file=<filename> Nishant Shreshth
Я выполнил команду jhat, чтобы проанализировать файл дампа кучи, но я получил ошибку ниже:Reading from 447start.out... java.io.IOException: Unrecognized magic number: 1027423549 at com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:81) at com.sun.tools.hat.Main.main(Main.java:143) Здесь 447start.out - имя файла журнала. Chaitanya
Jhat скорее не удобный инструмент Adam Dyga
Я сгенерировал дамп кучи 16 Гб на сервере, используя-XX:+HeapDumpOnOutOfMemoryError опция jvm иjhat работал плавно с этим. Спасибо за хороший совет! elias
Использование jhat было хорошим вариантом, так как я использую OpenJDK в Linux, который включает в себя jhat, что делает его простым вариантом с использованием openjdk. JeremyCanfield

Похожие вопросы