Erro de despejo de heap Java com o comando jmap: EOF prematuro
Encontrei abaixo a exceção durante a execução do comando abaixo
jmap -dump:format=b,file=heap_dump.bin <process_id>
resultado:
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)
Versão 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
Hardware: RHEL 5.x, máquina Linux com CPU de 4 núcleos 6 GB de RAM
Conforme o banco de dados de relatórios de erros da Oracle (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554), esse problema foi corrigido, mas ainda estou recebendo a versão do jdk 1.7 com a compilação no: 45
Você pode sugerir outra solução além da atualização para o Jdk 1.8, que não é possível no meu caso devido a outras dependências?
EDITAR:
Eu tentei com o comando abaixo e este comando também não funciona (arquivo de despejo parcial gerado) e mostra o mesmo EOF prematuro.
jmap -J-d64 -dump:format=b,file=<filename> <pid>
Acionei o comando com o usuário que iniciou o processo. Esse usuário tinha permissões de gravação no diretório. O arquivo foi gerado, mas estava incompleto.
9 MB arquivo foi escrito para2 GB heap, que não é utilizável para análise.