web-dev-qa-db-fra.com

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 à recevoir une "exception de mémoire insuffisante" et un "espace de pile Java" en utilisant Eclipse, Tomcat et un JRE.

En cherchant à ajuster les paramètres de la mémoire, j'ai trouvé trois emplacements:

  • Eclipse.ini

  • Les paramètres JRE sous Fenêtre> Préférences

  • Catalina.sh ou Catalina.bat

Quelles sont les différences entre les paramètres -xms et -xmx dans ces différents endroits et que signifie-t-il?

Est-il possible de vérifier que ces paramètres de mémoire sont configurés en conséquence?

Quels sont les paramètres optimaux -xms et -xmx pour un ordinateur disposant de 2 Go de RAM?

D'autres astuces de mémoire?

Merci.

58
Brandon

-xms est la mémoire de démarrage (VM start)), -xmx est la mémoire maximale de la VM

  • Eclipse.ini: la mémoire pour le VM exécutant Eclipse
  • paramètre jre: la mémoire pour Java exécutés à partir d'Eclipse
  • catalina.sh: la mémoire de votre serveur Tomcat
52
Vinze

Tout d'abord, je vous suggère de limiter le problème au composant émettant "l'exception de mémoire insuffisante".

Cela pourrait être:

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

Les paramètres de la JVM -xms et -xmx représente la "mémoire de démarrage" du tas et la "mémoire maximale". Oubliez la "mémoire de démarrage". Cela ne va pas vous aider maintenant et vous ne devez modifier ce paramètre que si vous êtes certain que votre application consommera rapidement cette quantité de mémoire.

En production, je pense que le seul paramètre que vous pouvez modifier est le -xmx sous les fichiers Catalina.sh ou Catalina.bat. Toutefois, si vous testez votre application Web directement à partir d'Eclipse avec un environnement de débogage configuré de Tomcat, vous pouvez simplement vous rendre dans "Configurations de débogage"> "Apache Tomcat"> "Arguments"> "Arguments de la machine virtuelle" et définir le -xmx Là.

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

14
bruno conde

Trouvé 2 problèmes dans notre cas.

  1. La mémoire s’arrêtait et il était impératif de définir une taille plus élevée pour la permission de démarrage. J'imagine qu'il utilisait la mémoire plus rapidement que je pouvais l'allouer. Dans notre cas. -XX: PermSize = 256m -XX: MaxPermSize = 256m

  2. Nous utilisons Clearcase et le plug-in de Rational Clearcase SCM (7.0.0.2) a été utilisé dans Eclipse. Le plugin expliquait pourquoi Eclipse s'était écrasé. Et pour le moment, nous ne savons pas pourquoi, mais cela pourrait être bon à savoir pour les autres. A été obligé de le désactiver.

3
Andreas Mattisson

Mon FLashBuilder plante tout le temps lorsque j'essaie de publier une nouvelle version ou que j'abuse des fonctionnalités "Marquer les occurrences" et "Lien avec l'éditeur".

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

Surtout en définissant le fichier FlashBuilder.ini avec 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.

2

Tomcat dans Eclipse n'utilise ni catalina.sh ni chauve-souris. Pour configurer la mémoire pour Tomcat géré, utilisez VM paramètres de la configuration d'exécution du serveur

2
chro

J'ai ces paramètres:

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

Eclipse s'est écrasé de manière aléatoire avant de définir PermSize sur MaxPermSize.

1
dmatej

Il existe plusieurs paramètres de mémoire pour une bonne raison.

Le paramètre de mémoire Eclipse est dû au fait qu’Eclipse est un gros programme Java. Si vous allez avoir une énorme quantité de fichiers ouverts dans quelques projets, vous voudrez alors donner à Eclipse Ce problème ne concerne que les systèmes "entreprise". Normalement, les projets personnels n’utilisent pas autant de descripteurs de fichier ou d’interfaces.

Le paramètre JRE indique la quantité de RAM nécessaire à l'exécution Java) lorsque vous exécutez votre projet. Il s'agit probablement de celle que vous souhaitez utiliser lorsque vous exécutez une application de mémorisation de mémoire. J'ai exécuté des projets mathématiques avait besoin de quelques concerts de bélier et devait vraiment dire au JRE que tout allait bien, la JVM continuait de supposer que mon programme était dans un état de fuite qui coulait, mais je le faisais exprès, et je devais dire précisément à JVM ce qu'il était autorisé à utiliser. .

Le paramètre de mémoire de Catalina est alors destiné au serveur d'applications Tomcat. Ce serveur a besoin de mémoire pour chaque application et chaque utilisateur simultané. Cela se confond avec le numéro JRE car votre projet peut être une application Web et je ne suis pas sûr de celui qui a besoin de mémoire.

1
Karl

Vous avez également des problèmes avec la mémoire dans Eclipse, mais ce n’est pas ce qui se produit pour nous lors de son exécution; c’est lorsque Eclipse effectue une actualisation (manuellement ou automatiquement), ou si vous essayez de la construire, Eclipse se bloque et fermer.

Dans les journaux, il y a quelques 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 le fichier Eclipse.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

Tous ceux qui ont déjà vu ce problème?
Ajoutera que le projet utilisé est très volumineux.

1
Andreas Mattisson

Nous avons rencontré un problème d'espace avec Ant en essayant de construire un très grand projet Flex qui pourrait not ê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 pour obtenir leur version de SDK et revenir à la version 3.3.0.

Pour les curieux.

J'ai suivi le bogue jusqu'à un fichier d'interface dans lequel une paire d'accesseurs supplémentaire avait été ajoutée "get/set maskTrackSkin". L'erreur d'espace de segment de mémoire s'est produite si des fonctions supplémentaires ont été ajoutées à l'interface et, pour aggraver les choses, l'interface n'était pas dans le projet qui obtenait l'erreur de segment de mémoire. J'espère que ça aide quelqu'un.

0
PRangel

Si vous constatez un manque de mémoire, demandez-vous si cela est plausible: avez-vous vraiment besoin de tant de mémoire? Si ce n’est pas le cas (c’est-à-dire lorsque vous n’avez pas d’énormes objets et que vous n’avez pas besoin de créer des millions d’objets pour une raison quelconque), il est probable que vous subissiez une fuite de mémoire.

En Java, cela signifie que vous conservez une référence à un objet quelque part, même si vous n'en avez plus besoin. Les causes courantes en sont l’oubli d’appeler close () sur des ressources (fichiers, connexions à une base de données, instructions et jeux de résultats, etc.).

Si vous soupçonnez une fuite de mémoire, utilisez un profileur pour rechercher quel objet occupe toute la mémoire disponible.

0
Aaron Digulla

Adobe Flash Builder 4.6 Read Me.pdf vous recommande de modifier le fichier Eclipse.ini pour votre instance Eclipse, afin que celui-ci inclue les paramètres suivants:

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