Como faço para salvar o Heap (Dump para um arquivo) no Eclipse?
-
10-07-2019 - |
Pergunta
Estou recebendo este erro quando eu executar ou depurar o meu GA / AI de MyEclipse:
Exception in thread "main" java.lang.OutOfMemoryError: espaço de pilha Java
aparência eclipse.ini como este:
-showsplash com.genuitec.myeclipse.product
--launcher.XXMaxPermSize 256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M
MyEclipse é chamado assim:
"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms1448M -Xmx1448M
batendo as configurações da VM a partir deste:
"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms80M -Xmx1024M
não teve nenhum efeito. Então, eu estou tentando fazê-lo para despejar o heap para um arquivo, mas colocando estes:
-XX:+HeapDumpOnCtrlBreak
-XX:+HeapDumpOnOutOfMemoryError
nos argumentos programa teve nenhum efeito. Como faço para conseguir algo para trabalhar com mais análise de uso de memória? jstack, por exemplo, não está disponível em plataformas Windows. E usando SendSignal não tem qualquer efeito que eu possa ver.
Solução
Há uma série de maneiras de obter heap dumps. Aqui estão alguns que eu usei:
-
-XX:+HeapDumpOnOutOfMemoryError
deve te despejar se você bater o seu OOM. - VisualVM (livre) e usar sua interface gráfica para forçar um heap dump
- Use um dos muitos bons perfis comerciais (JProfiler, YourKit, ...)
- Use jmap (veja abaixo) para forçar um despejo de um processo em execução
Se você estiver executando Java 6, jmap deve funcionar no Windows. Isto pode ser útil se você quiser despejar a pilha e você não ter atingido o seu OOM. Use o Windows Task Manager para encontrar o pid do seu aplicativo Java, e em um console executar este:
jmap -dump:format=b,file=c:\heap.bin <pid>
Além de VisualVM, o Eclipse Memory Analyzer (também gratuito) pode ajudá-lo a analisar o que está comendo todo o espaço uma vez que tenho o despejo.
Outras dicas
-XX:+HeapDumpOnOutOfMemoryError
devem ser colocados em "VM Arguments
" não "Program Arguments
"
Você pode monitorar usos de memória com JConsole.
O jstat também irá ajudar .