Подтвердить что ты не робот

Как анализировать дамп кучи, используя jmap в java

Я создаю кучу дампа, используя следующую команду:

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

jhat [ options ] <heap-dump-file>

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

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

-dump:format=b,file=<filename>

Ответ 3

Если вы используете Eclipse в качестве своей IDE, я бы рекомендовал отличный плагин eclipse анализатор памяти

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

Ответ 4

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

Ответ 5

Очень поздно ответить на это, но стоит взглянуть быстро. Всего 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 id)

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

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

17252 - это vmid, который нам нужен.

Теперь мы узнаем, как использовать 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

Теперь используйте Jhat Jhat используется для анализа дампа коллекции мусора в 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://localhost:7000/

Предоставлено: JMAP, Как отслеживать и анализировать мусор коллекции в 10 направлениях

Ответ 6

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