Jhat - OutOfMemoryError

6 respostas
donatinho

Bom dia macada, beleza?

Entao, estou com o seguinte problema.

Estou tentando abrir um dump de uma instancia em java que foi gerada pelo jmap.

Estou usando : jhat heap.bin

e tendo a seguinte pilha de erro:

C:\Arquivos de programas\Java\jdk1.6.0_32\bin>jhat heap.bin
Reading from heap.bin...
java.io.IOException: Map failed
        at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:748)
        at com.sun.tools.hat.internal.parser.MappedReadBuffer.create(MappedReadBuffer.java:47)
        at com.sun.tools.hat.internal.parser.HprofReader.<init>(HprofReader.java:145)
        at com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:76)
        at com.sun.tools.hat.Main.main(Main.java:143)
Caused by: java.lang.OutOfMemoryError: Map failed
        at sun.nio.ch.FileChannelImpl.map0(Native Method)
        at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:745)
        ... 4 more
File mapping failed, will use direct read
Dump file created Thu May 17 22:01:29 GMT-03:00 2012

Alguem sabe como passar os parametros corretos para o jhat a fim de que possa abrir esse dump?

donatinho

6 Respostas

SmartCardMan

tenta assim:

jhat -J-mx768m -stack false heap.bin

onde o valor do atributo deve ser maior que o seu heapdump

abraço

donatinho

Boa tarde SmartCardMan, beleza cara?

Entao, o meu dump possui um tamanho de 1.2G e estou tentando abrir em uma maquina de 32 bits.

Fiz o exemplo que voce me passou, mas ainda deu o mesmo erro.

Existe um limite para o tamanho do dump?

Abracos

donatinho

ViniGodoy

Por que não usa o profiler do Netbeans? É mais rápido, mais poderoso e mais visual do que o JHat.
E lá você pode abrir os dumps do mesmo jeito e, geralmente, ele não esbarra em problemas de memória como esse.

donatinho

Grande ViniGodoy, beleza cara?

Entao, baixei o netBeans ide 7.1.2 e tentei abrir o meu dump.bin de 1.2 G.

Ate ai tudo bem, porem quando chegou em 39% do arquivo aberto deu erro:

Falha ao abrir o despejo de pilha.

             Invalid type 50.

Sera que meu dump esta corrompido?

:shock:

donatinho

ViniGodoy

Provavelmente o dump está corrompido sim. Tente gera-lo novamente.

Aliás, você pode pedir para a VM fazer isso para você, sempre que houver um crash de OutOfMemoryError. A vantagem é que a VM consegue gerar o dump antes de eliminar a thread problemática (essa eliminação pode retirar do trace os objetos realmente problemáticos).

Basta usar a opção -XX:-HeapDumpOnOutOfMemoryError quando rodar o Java.
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

donatinho

Beleza ViniGodoy!

Vou gerar o dump novamente…

Obrigado cara…

see ya

donatinho

:slight_smile:

Criado 30 de maio de 2012
Ultima resposta 30 de mai. de 2012
Respostas 6
Participantes 3