java.lang.OutOfMemoryError: espace de stack Java avec NetBeans

C’est l’erreur que j’obtiens lorsque je lance mon application Web dans une instance du conteneur de servlets Tomcat démarré par NetBeans. Pour résoudre ce problème, j’ai même changé la taille du tas dans netbeans.conf, mais toujours la même erreur. Comment puis-je empêcher que cela se produise?

 Statut HTTP 500 - ---------------------------------------------- ---------------------------------- type description du message du rapport d'exception Le serveur a rencontré une erreur interne () qui l'a empêché de remplir cette demande.  exception javax.servlet.ServletException: l'exécution du servlet a déclenché une exception org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter (MonitorFilter.java:362) cause principale java.lang.OutOfMemoryError: note d'espace de mémoire morte Java La trace de stack complète de la cause première est disponible dans les journaux Apache Tomcat / 5.5.9. 

La modification de la taille du segment de mémoire dans netbeans.conf modifie uniquement le segment de mémoire pour NetBeans lui-même, et non pour les applications exécutées via NetBeans.

La bonne façon est de faire un clic droit sur le projet et de sélectionner “Propriétés” puis “Exécuter”; Là, vous pouvez définir les options de la VM de manière appropriée ( -Xmx256m , par exemple). Ça devrait ressembler a quelque chose comme ca:

définir la taille du tas
(Merci à VonC pour avoir trouvé cette image.)

Arrêtez le serveur Tomcat, définissez la variable d’environnement CATALINA_OPTS, puis redémarrez Tomcat. Regardez le fichier tomcat-install/bin/catalina.sh ou catalina.bat pour savoir comment cette variable est utilisée. Par exemple,

 set CATALINA_OPTS="-Xms512m -Xmx512m" (Windows)export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh) 

Dans catalina.bat ou catallina.sh , vous avez peut-être remarqué que CATALINA_OPTS, JAVA_OPTS ou les deux peuvent être utilisés pour spécifier les options JVM de Tomcat.

Quelle est la différence entre CATALINA_OPTS et JAVA_OPTS?

Le nom CATALINA_OPTS est spécifique au conteneur de servlets Tomcat, alors que JAVA_OPTS peut être utilisé par d’autres applications Java (par exemple, JBoss). Les variables d’environnement étant partagées par toutes les applications, nous ne souhaitons pas que Tomcat récupère par inadvertance les options JVM destinées à d’autres applications. Je préfère utiliser CATALINA_OPTS.

Comment définir la taille de la stack java dans JBoss?

Arrêtez le serveur JBoss, modifiez $ JBOSS_HOME / bin / run.conf, puis redémarrez le serveur JBoss. Vous pouvez changer la ligne avec JAVA_OPTS en quelque chose comme:

 JAVA_OPTS="-server -Xms128m -Xmx128m" 

Comment définir la taille de la stack java dans Eclipse? Vous avez 2 options:

  1. Modifiez eclipse-home / eclipse.ini pour qu’il ressemble à ce qui suit et redémarrez Eclipse.

    -vmargs-Xms64m-Xmx256m

  2. Ou, vous pouvez simplement exécuter la commande eclipse avec des options supplémentaires à la toute fin. Tout ce qui suit -vmargs sera traité comme une option JVM et transmis directement à la JVM. Les options JVM spécifiées dans la ligne de commande de cette manière remplaceront toujours celles du fichier eclipse.ini. Par exemple,

    eclipse -vmargs -Xms64m -Xmx256m

Comment définir la taille du tas Java dans NetBeans?

Quittez NetBeans, éditez le fichier netbeans-install / etc / netbeans.conf. Par exemple,

 netbeans_default_options="-J-Xms512m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=128m -J-Xverify:none 

Comment définir la taille de segment de mémoire Java dans Apache Ant?

Définissez la variable d’environnement ANT_OPTS. Examinez le fichier $ANT_HOME/bin/ant ou %ANT_HOME%\bin\ant.bat pour savoir comment cette variable est utilisée par l’environnement d’exécution Ant.

 set ANT_OPTS="-Xms512m -Xmx512m" (Windows)export ANT_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv ANT_OPTS "-Xms512m -Xmx512m" (tcsh/csh) 

Si vous augmentez la mémoire virtuelle de votre serveur Tomcat, tout ira bien.

Pas:

  1. Au NB, parcourez le menu Windows et ajoutez des services
  2. Vous trouverez Tomcat dans les services. Faites un clic droit sur le serveur Tomcat et sélectionnez Propriétés
  3. Accédez à la plate-forme dans les propriétés et écrivez -Xms512m dans le champ des options de la machine virtuelle.

Je suppose que l’augmentation de la mémoire ne résoudra pas le problème. Que fait ce MonitorFilter? Qu’est-ce qui ronge tout ce souvenir?

Votre meilleur pari est de comprendre cela. S’il s’agit d’une application Web, voyez si vous pouvez désactiver ce filtre et l’exécuter sans lui. Si vous avez du succès, vous savez que MonitorFilter provoque votre échec.

Cela n’a rien à voir avec NetBeans (enfin, peut-être), mais plutôt avec Tomcat. Tomcat est le processus qui est à court de tas, pas NetBeans. Suivez le processus de démarrage de votre Tomcat. Si celui-ci est associé à NB, Tomcat est enterré dans l’installation NB, recherchez un répertoire “enterpriseN”, N étant un nombre, Tomcat s’y trouve probablement et il s’agit d’une dissortingbution plutôt générique.

Pour ce qui est de savoir pourquoi le moniteur est géré, il est difficile de dire que c’est un processus assez simple quand on y pense. Vous pouvez également essayer de désactiver la surveillance HTTP pour voir s’il s’agit d’un problème lié à la surveillance elle-même ou à un élément de votre application.