2009-05-07 7 views
4

Je reçois cette erreur quand je lance ou déboguer mon GA/AI de MyEclipse:Comment enregistrer le tas (vidage vers un fichier) dans Eclipse?

Exception dans le thread "principal" java.lang.OutOfMemoryError: espace de tas Java

eclipse.ini ressemble à ceci:

-showsplash com.genuitec.myeclipse.product 
--launcher.XXMaxPermSize 256m 
-vmargs 
-Xms128m 
-Xmx512m 
-Duser.language=en 
-XX:PermSize=128M 
-XX:MaxPermSize=256M 

MyEclipse est appelé comme ceci:

"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms1448M -Xmx1448M 

heurtant les paramètres vm à partir ceci:

"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms80M -Xmx1024M 

n'a eu aucun effet. Donc, je suis en train de le faire pour vider le tas dans un fichier, mais en plaçant ceux-ci:

-XX:+HeapDumpOnCtrlBreak 
-XX:+HeapDumpOnOutOfMemoryError 

dans les arguments du programme n'a eu aucun effet. Comment puis-je obtenir quelque chose pour travailler avec plus d'analyse d'utilisation de la mémoire? jstack, par exemple, n'est actuellement pas disponible sur les plateformes Windows. Et l'utilisation de SendSignal n'a aucun effet que je peux voir.

a screen shot

+0

essayer upping XXMaxPermSize aussi bien – Thilo

Répondre

11

Il existe plusieurs façons d'obtenir des vidages de tas. Voici quelques-unes que je l'ai utilisé:

  1. -XX:+HeapDumpOnOutOfMemoryErrordevrait vous permettre de vider si vous touchez votre OOM.
  2. Connect avec VisualVM (gratuit) et utiliser son interface graphique pour forcer un tas de vidage
  3. Utilisez l'une des nombreuses bonnes profileurs commerciales (JProfiler, YourKit, ...)
  4. Utilisez jmap (voir ci-dessous) pour forcer un vidage à partir d'un processus en cours

Si vous exécutez Java 6, jmap devrait fonctionner sur Windows. Cela peut être utile si vous voulez vider le tas et que vous n'avez pas frappé votre MOO. Utilisez Gestionnaire des tâches Windows pour trouver le pid de votre application Java et dans une console exécuter ceci:

jmap -dump:format=b,file=c:\heap.bin <pid> 

En plus de VisualVM, le Eclipse Memory Analyzer (également gratuit) peut vous aider à analyser ce qui ronge tout l'espace une fois que vous J'ai la décharge.

+0

Quand je lance la fonction principale, une application est créée en VisualVM qui ne dispose pas d'une fonctionnalité de sauvegarde: vous ne pouvez pas Heap Dump, Thread Dump, il n'y a pas d'onglet Heap, etc. –

+0

Si -XX: + HeapDumpOnOutOfMemoryError a bien fonctionné, à quoi cela ressemblerait-il sur mon système? –

+0

jps génère également le processus pid – ssedano

1

Vous pouvez surveiller les usages de la mémoire avec JConsole. Le jstat aidera également.

2

-XX:+HeapDumpOnOutOfMemoryError devrait être mis en « VM Arguments » non « Program Arguments »

Questions connexes