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.

um tiro de tela

Foi útil?

Solução

Há uma série de maneiras de obter heap dumps. Aqui estão alguns que eu usei:

  1. -XX:+HeapDumpOnOutOfMemoryError deve te despejar se você bater o seu OOM.
  2. VisualVM (livre) e usar sua interface gráfica para forçar um heap dump
  3. Use um dos muitos bons perfis comerciais (JProfiler, YourKit, ...)
  4. 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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top