Ошибка дампа кучи Java с помощью команды jmap: Преждевременный EOF
Я встретил ниже исключение во время выполнения ниже команды
jmap -dump:format=b,file=heap_dump.bin <process_id>
выход:
Dumping heap to <file_name>
Exception in thread "main" java.io.IOException: Premature EOF
at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:248)
at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:199)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180)
at sun.tools.jmap.JMap.dump(JMap.java:242)
at sun.tools.jmap.JMap.main(JMap.java:140)
Версия JDK: 1.7.0_45
VM_OPTs:
-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=1500
-XX:G1HeapRegionSize=2 -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2
Аппаратное обеспечение: RHEL 5.x, 4-ядерный процессор Linux, 6 ГБ ОЗУ
Согласно базе данных отчетов об ошибках оракула ( http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554), эта проблема была исправлена, но я все еще получаю версию jdk 1.7 со сборкой №:45
Можете ли вы предложить какое-либо решение, кроме обновления до Jdk 1.8, что невозможно в моем случае из-за других зависимостей?
РЕДАКТИРОВАТЬ:
Я попытался с нижеприведенной командой, и эта команда тоже не работает (сгенерированный файл частичного дампа) и показывает тот же преждевременный EOF.
jmap -J-d64 -dump:format=b,file=<filename> <pid>
Я запустил команду с пользователем, который запустил процесс. Этот пользователь имел права на запись в каталог. Файл был создан, но он был неполным.
Файлразмером 9 МБ был записан для кучи объемом 2 ГБ, которую нельзя использовать для анализа.
1 ответ
Комментарий Брайана поможет решить проблему.
Если вы используете G1GC
алгоритм в 64-битной машине:
Команда ниже не работает (исключая live
опция)
jmap -J-d64 -dump:format=b,file=<heap_dump_filename> <pid>
Вы должны использовать опцию ниже, чтобы получить дамп кучи
jmap -J-d64 -dump:live,format=b,file=<heap_dump_filename> <PID>
Есть несколько советов по использованию -F
возможность принудительно создать дамп кучи, но в соответствии с техническими замечаниями оракула:
-F Force. Используйте с опцией jmap -dump или jmap -histo, если pid не отвечает. Активный подопция не поддерживается в этом режиме.
Так как дамп кучи требуется с опцией G1GC, вышеупомянутая опция не может быть использована.