Paramètres de mémoire Eclipse lors de l’obtention de «Java Heap Space» et «Out of Memory»

En essayant de lancer et d’exécuter un projet flex / java dans eclipse, je continuais à obtenir une “exception de mémoire insuffisante” et un “espace de tas Java” utilisant Eclipse, Tomcat et un JRE.

Lors de la recherche d’essayer d’ajuster les parameters de mémoire, j’ai trouvé trois endroits pour les ajuster:

  • Eclipse.ini

  • Les parameters JRE sous Fenêtre> Préférences

  • Catalina.sh ou Catalina.bat

Quelles sont les différences entre la définition de -xms et de -xmx à ces différents endroits et qu’est-ce que cela signifie?

Existe-t-il un moyen de vérifier que ces parameters de mémoire sont définis en conséquence?

Quels sont les parameters optimaux -xms et -xmx pour un ordinateur avec 2 Go de RAM?

D’autres astuces de mémoire?

Merci.

-xms est la mémoire de démarrage (au démarrage de la machine virtuelle), -xmx est la mémoire maximale pour la machine virtuelle

  • eclipse.ini: la mémoire de la machine virtuelle en cours d’exécution
  • jre setting: la mémoire pour les programmes java s’exécute depuis eclipse
  • catalina.sh: la mémoire pour votre serveur tomcat

Tout d’abord, je suggère que vous réduisiez le problème à quel composant émet “l’exception de mémoire insuffisante”.

Cela pourrait être:

  1. Eclipse elle-même (ce dont je doute)
  2. Votre application sous Tomcat

Les parameters JVM -xms et -xmx représentent la “mémoire -xmx du tas et la “mémoire maximale”. Oubliez la “mémoire de démarrage”. Cela ne va pas vous aider maintenant et vous ne devriez changer ce paramètre que si vous êtes sûr que votre application consumra rapidement cette quantité de mémoire.

En production, je pense que le seul paramètre que vous pouvez modifier est -xmx sous les fichiers Catalina.sh ou Catalina.bat. Mais si vous testez votre application Web directement depuis Eclipse avec un environnement de débogage configuré de Tomcat, vous pouvez simplement accéder à vos “Configurations de débogage”> “Apache Tomcat”> “Arguments”> “Arguments de machine virtuelle” et définir le -xmx .

Quant à -xmx optimal pour 2 Go, cela dépend beaucoup de votre environnement et du nombre de requêtes que votre application peut prendre. Je voudrais essayer des valeurs de 500 Mo à 1 Go. Vérifiez la limite “zone” de la mémoire virtuelle de votre système d’exploitation et la limite de la machine virtuelle Java elle-même.

Trouvé 2 problèmes dans notre cas.

  1. La mémoire s’arrêtait et nous devions obligatoirement définir la taille de perm du démarrage à une valeur plus élevée. J’imagine qu’il utilisait la mémoire plus rapidement que possible pour l’atsortingbuer. Dans notre cas. -XX: taille de la requête = 256m -XX: taille de la valeur maximale = 256m

  2. Nous utilisons Clearcase et le plug-in de Rational Clearcase SCM (7.0.0.2) a été utilisé dans Eclipse. Le plugin était le cas pour lequel Eclipse est tombé en panne. Et pour le moment nous ne soaps pas pourquoi, mais pourrait être bon à savoir pour les autres. A été obligé de le désactiver.

Tomcat dans Eclipse n’utilise pas catalina.sh ou bat. Pour configurer la mémoire pour Tomcat géré, utilisez les parameters de machine virtuelle dans la configuration d’exécution du serveur

Mon FLashBuilder plante tout le temps lorsque j’essaie de publier une nouvelle version ou que j’abuse des fonctionnalités “Mark Occurrences” et “Link with editor”.

J’ai amélioré considérablement mes performances Flash en suivant ces étapes: http://www.redcodelabs.com/2012/03/eclipse-speed-up-flashbuilder/

Surtout en définissant FlashBuilder.ini à la configuration suivante

 -vm C:/jdk1.6.0_25/bin -startup plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar –launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502 -product org.eclipse.epp.package.jee.product –launcher.defaultAction openFile –launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform –launcher.XXMaxPermSize 256m –launcher.defaultAction openFile -vmargs -server -Dosgi.requiredJavaVersion=1.5 -Xmn128m -Xms1024m -Xmx1024m -Xss2m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelGC 

Ma configuration matérielle est Intel i3 cpu, 4 Go DDR3, Windows 7 64 bits.

Il y a quelques parameters de mémoire différents pour une bonne raison.

Le paramètre de mémoire eclipse est parce que Eclipse est un programme Java volumineux. Si vous voulez ouvrir une grande quantité de fichiers dans plusieurs projets, vous voudrez donner plus de RAM à Eclipse. Ceci est un problème uniquement sur les systèmes “d’entreprise”, les projets personnels n’utilisant généralement pas beaucoup de descripteurs de fichiers ou d’interfaces.

Le paramètre JRE correspond à la quantité de mémoire RAM pour autoriser le runtime Java lorsque vous exécutez votre projet. C’est probablement celui que vous souhaitez lorsque vous exécutez une application qui consum de la mémoire. J’ai exécuté des projets mathématiques nécessitant quelques Go de RAM et je devais vraiment dire à JRE que tout allait bien, la JVM continuait à supposer que mon programme était dans un état de fuite, mais je le faisais express et je devais le dire à JVM spécifiquement ce qu’il était autorisé à utiliser.

Ensuite, le paramètre de mémoire de Catalina est pour le serveur d’applications Tomcat. Ce serveur a besoin de mémoire pour chaque application et utilisateurs simultanés. Cela se confond avec le numéro JRE car votre projet peut être une application Web et je ne suis pas sûr de savoir lequel a besoin de la mémoire.

Également avoir des problèmes avec la mémoire dans Eclipse, mais la façon dont elle est pour nous, ce n’est pas lorsqu’elle est exécutée, c’est quand Eclipse fait un rafraîchissement (manuellement ou automatiquement), fermer.

Dans les journaux, vous trouverez des informations:

 Heap def new generation total 36352K, used 11534K [0x10040000, 0x127b0000, 0x14f00000) eden space 32320K, 29% used [0x10040000, 0x10994c30, 0x11fd0000) from space 4032K, 49% used [0x123c0000, 0x125aed80, 0x127b0000) to space 4032K, 0% used [0x11fd0000, 0x11fd0000, 0x123c0000) tenured generation total 483968K, used 125994K [0x14f00000, 0x327a0000, 0x50040000) the space 483968K, 26% used [0x14f00000, 0x1ca0ab38, 0x1ca0ac00, 0x327a0000) compacting perm gen total 58112K, used 57928K [0x50040000, 0x53900000, 0x60040000) the space 58112K, 99% used [0x50040000, 0x538d2160, 0x538d2200, 0x53900000) No shared spaces configured. 

Même si j’ajuste l’éclipse.ini pour utiliser ces valeurs, cela ne semble pas être appliqué.

 -showsplash org.eclipse.platform --launcher.XXMaxPermSize 1024M -framework plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar -vmargs -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms512m -Xmx1024m 

Avez-vous déjà vu ce problème auparavant?
Ajoutera que le projet utilisé est très volumineux.

J’ai ces parameters:

 -vmargs ... -Duser.name=... -XX:PermSize=256m -XX:MaxPermSize=256m -Xmn128m -Xms256m -Xmx768m 

Eclipse est tombé au hasard avant de définir PermSize comme MaxPermSize.

Si vous voyez un peu de mémoire, demandez-vous si cela est plausible. Avez-vous vraiment besoin de beaucoup de mémoire? Si ce n’est pas le cas (c.-à-d. Quand vous n’avez pas d’objects énormes et que vous n’avez pas besoin de créer des millions d’objects pour une raison quelconque), il y a des chances que vous ayez une fuite de mémoire.

En Java, cela signifie que vous conservez une référence à un object quelque part, même si vous n’en avez plus besoin. Les causes les plus fréquentes sont l’oubli d’appeler close () sur les ressources (fichiers, connexions à la firebase database, instructions et jeux de résultats, etc.).

Si vous suspectez une fuite de mémoire, utilisez un profileur pour déterminer quel object occupe toute la mémoire disponible.

Nous avons rencontré un problème d’espace mémoire avec Ant en essayant de créer un projet Flex très volumineux qui ne pouvait être résolu en augmentant la mémoire allouée à Ant ou en ajoutant le paramètre fork = true. Cela a fini par être un bogue dans Flex 3.4.0 sdk. J’ai finalement compris cela après avoir interrogé les développeurs sur leur version SDK et revenir à la version 3.3.0.

Pour les curieux.

J’ai suivi le bogue dans un fichier d’interface auquel une paire d’accesseur supplémentaire avait été ajoutée “get / set maskTrackSkin”. L’erreur d’espace mémoire a frappé si des fonctions supplémentaires ont été ajoutées à l’interface et, pour aggraver les choses, l’interface ne se trouvait pas dans le projet qui recevait l’erreur d’espace mémoire. J’espère que cela aide quelqu’un.

Adobe Flash Builder 4.6 Lire Me.pdf recommande d’éditer le fichier eclipse.ini pour votre instance Eclipse afin qu’il comprenne les parameters suivants:

 -vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m