Сначала сборщик мусора и ошибка JMap EOF

Мы работаем над кучей серверного сервера для обнаружения и устранения утечек памяти. Для этого мы периодически используем jmap для сбора необходимой информации.

Но на прошлой неделе мы не смогли взять дамп, потому что это вызвало ошибку EOF и выключение экземпляра Tomcat.

Я искал в Интернете, но не нашел никакой конкретной информации об этой ошибке. Мы обнаружили, что это происходит только при использовании алгоритма сбора мусора Gc First.

Это командная строка, которую мы использовали для выполнения jmap:

jmap -dump:format=b,file=heap.bin <PID>

Версия Java на сервере: JDK 1.7.0_7 x64

Кто-нибудь уже сталкивался с такой ошибкой? Возможно, какая-то конфигурация отсутствует или требуется патч для java/jmap.

UPDATE

Еще несколько сведений, которые мы собрали об этой ошибке:

[root]# jmap -dump:format=b,file=heap.bin 7806
    Dumping heap to /tmp/heap.bin ...
    Exception in thread "main" java.io.IOException: Premature EOF
        at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:244)
        at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:193)
        at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:213)
        at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180)
        at sun.tools.jmap.JMap.dump(JMap.java:241)
        at sun.tools.jmap.JMap.main(JMap.java:140)
[root]#

Примечание: целевой каталог имеет более 500 гб свободного места

Ошибка, отправленная на Catalina.out(ошибка дампа JVM):

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f0269cc41c6, pid=7806, tid=139647231129360
#
# JRE version: Java(TM) SE Runtime Environment (7.0_40-b43) (build 1.7.0_40-b43)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b56 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x58c1c6]  DumperSupport::dump_field_value(DumpWriter*, char, unsigned char*)+0x1c6
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /opt/tomcat6/bin/hs_err_pid7806.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp

Ответ 1

Я смог решить проблему, используя несколько дополнительных опций.

java version "1.7.0_45".

Процесс Java был настроен с использованием первого алгоритма сбора мусора: -XX:+UseG1GC

jmap -J-d64 -dump:live,format=b,file=<heap_dump_filename> <PID>