Ошибка сброса кучи 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 Linux 6 ГБ оперативной памяти

В соответствии с базой данных отчета об ошибках оракула (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554), эта проблема была исправлена, но я все еще получаю версию jdk 1.7 с построить нет: 45

Можете ли вы предложить какое-либо решение, кроме обновления на Jdk 1.8, что невозможно в моем случае из-за других зависимостей?

EDIT:

Я пробовал с командой ниже, и эта команда тоже не работает (сгенерированный файл частичного дампа) и показывает тот же преждевременный 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 для принудительного сброса кучи, но в соответствии с оракулом technotes:

-F Силы. Используйте параметр jmap -dump или jmap -histo, если pid не отвечает. В этом режиме живое подчинение не поддерживается.

Поскольку с помощью опции G1GC требуется сброс кучи, опция выше не может использоваться.