Как извлечь дамп кучи JVM из файла дампа ядра? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь преобразовать дамп ядра Linux процесса Java в файл дампа кучи, подходящий для анализа с помощью Eclipse MAT. Согласно этому сообщению блога, адаптированному к более новому OpenJDK 12, я создаю дамп ядра и затем запускаю jhsdb jmap, чтобы преобразовать дамп в формат HPROF:

>sudo gcore -o dump 24934
[New LWP 24971]
...
[New LWP 17921]
warning: Could not load shared library symbols for /tmp/jffi4106753050390578111.so.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f94c7e9e98d in pthread_join (threadid=140276994615040, thread_return=0x7ffc716d47a8) at pthread_join.c:90
90      pthread_join.c: No such file or directory.
warning: target file /proc/24934/cmdline contained unexpected null characters
warning: Memory read failed for corefile section, 1048576 bytes at 0x7f93756a6000.
warning: Memory read failed for corefile section, 1048576 bytes at 0x7f9379bec000.
...
warning: Memory read failed for corefile section, 1048576 bytes at 0x7f94c82dd000.
Saved corefile dump.24934

> ls -sh dump.24934 
22G dump.24934

> /usr/lib/jvm/zulu-12-amd64/bin/jhsdb jmap --exe /usr/lib/jvm/zulu-12-amd64/bin/java --core dump.24934 --binaryheap --dumpfile jmap-dump.24934
Attaching to core dump.24934 from executable /usr/lib/jvm/zulu-12-amd64/bin/java, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 12.0.1+12
null

> ls -sh jmap-dump.24934 
3.3M jmap-dump.24934

Дамп ядра размер файла составляет 22 Гб, а файла дампа кучи - всего 3 Мб, поэтому вполне вероятно, что команда jhsdb jmap не сможет обработать весь дамп ядра. Также Eclipse MAT не может открыть файл дампа кучи со следующим сообщением: The HPROF parser encountered a violation of the HPROF specification that it could not safely handle. This could be due to file truncation or a bug in the JVM.

...