web-dev-qa-db-fra.com

Comment augmenter l'espace de mémoire Java pour une application Tomcat

Il y a beaucoup de questions qui posent cette question ou une question similaire.

Ils donnent tous la commande qui doit être exécutée. Ce que je ne comprends pas, c'est où écrire cette commande. Je souhaite augmenter de manière permanente l'espace de mémoire de mes applications Tomcat.

J'ai lu cette page  http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-Java-heap.html et il est dit dans la section Tomcat 

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, pas de "" autour de la valeur)
export CATALINA_OPTS = "- Xms512m -Xmx512m" (ksh/bash, "" autour de la valeur)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh, "" autour de la valeur)

J'ai donc remplacé la ligne 

set CATALINA_OPTS = 

avec 

set CATALINA_OPTS = -Xms512m -Xmx512m 

Mais j'ai toujours l'erreur.

javax.servlet.ServletException: l'exécution du servlet a déclenché une exception

cause première

Java.lang.OutOfMemoryError: espace de pile Java Java.lang.reflect.Array.multiNewArray (Méthode native) Java.lang.reflect.Array.newInstance (Array.Java:90) nom.tam.util.ArrayFuncs.newInstance (ArrayFuncs.Java:1028) nom.tam.fits.ImageData.read (ImageData.Java:259) nom.tam.fits.Fits.readHDU (Fits.Java:573) controller.UploadServlet.retreiveFITSFileFields (UploadServlet.Java:206) controller.ScanServerFiles.doPost (ScanServerFiles.Java:39) javax.servlet.http.HttpServlet.service (HttpServlet.Java:637) javax.servlet.http.HttpServlet.service (HttpServlet.Java:717)

24
Ankur

Votre changement pourrait bien fonctionner. Votre application a-t-elle besoin de beaucoup de mémoire? La trace de pile indique certaines fonctionnalités liées à Image.

Je suppose que l'erreur se produit soit tout de suite, avec un fichier volumineux, soit plus tard après plusieurs demandes. 

Si l'erreur se produit immédiatement, vous pouvez augmenter encore la mémoire ou enquêter pour savoir pourquoi autant de mémoire est nécessaire pour un fichier.

Si l'erreur se produit après plusieurs demandes, vous risquez d'avoir une fuite de mémoire - des objets ne sont pas récupérés par le garbage collector. L’utilisation d’un outil tel que JProfiler Peut vous aider à contrôler la quantité de mémoire utilisée par votre VM et à déterminer ce qui utilise cette mémoire et pourquoi les objets ne sont pas récupérés par le garbage collector. .

8
mdma

Il existe un mécanisme pour le faire sans modifier les fichiers de la distribution. Vous pouvez créer un fichier distinct %CATALINA_HOME%\bin\setenv.bat ou $CATALINA_HOME/bin/setenv.sh et y placer vos variables d'environnement. De plus, les paramètres de mémoire s’appliquent à la machine virtuelle Java et non à Tomcat. Je définirais donc la variable Java_OPTS:

set Java_OPTS=-Xmx512m

25
Juris

Tout d'abord, vous ne pouvez pas modifier les paramètres de mémoire uniquement pour une application Tomcat, mais pour toutes les instances de Tomcat.

Si vous exécutez Tomcat à partir de la console (à l'aide de startup.bat), vous devez modifier catalina.bat et vous amuser avec CATALINA_OPTS. Par exemple:

set CATALINA_OPTS=-Xms512m -Xmx512m

Redémarrer Tomcat appliquera les nouveaux paramètres.

Si vous obtenez toujours OutOfMemoryError, vous devez connaître la quantité de mémoire dont votre application a besoin à ce moment précis (nom.tam.util.ArrayFuncs ...). Vous devrez soit optimiser l'application, soit simplement augmenter la mémoire fournie à Tomcat.

9
cherouvim
  • Clic droit ouvert
  • cliquez sur ouvrir la configuration de lancement
  • aller aux arguments
  • Ici, vous pouvez ajouter dans VM arguments après avoir été endossés
  • Here you can add in VM arguments after endorsed

    -Xms64m -Xmx256m
    
4
Karthik Reddy

si vous utilisez Windows, c'est très simple. Il suffit d'aller dans les variables Système Environnement (clic droit sur Ordinateur> Propriétés> Paramètres système avancés> Variables Environnement); créez une nouvelle variable système avec le nom = CATALINA_OPTS et la valeur = -Xms512m -Xmx1024m. redémarrez Tomcat et profitez-en!

2
horaT

Vous devez ajouter les lignes suivantes dans votre fichier catalina.sh.

export CATALINA_OPTS="-Xms512M -Xmx1024M"

UPDATE: catalina.sh content dit clairement -

Ne définissez pas les variables dans ce script. Au lieu de cela, mettez-les dans un script setenv.sh dans CATALINA_BASE/bin pour que vos personnalisations restent séparées.

Vous pouvez donc ajouter ci-dessus dans setenv.sh (créez un fichier s'il n'existe pas).

2
Aniket Thakur

Il suffit de définir cette ligne supplémentaire dans le fichier catalina.bat 

LIGNE NO AUTOUR: 143

set "CATALINA_OPTS=-Xms512m -Xmx512m"

Et redémarrez le service Tomcat

0
Prashant Gupta

Pour le service Windows, vous devez exécuter Tomcat9w.exe (ou 6w/7w/8w) en fonction de votre version de Tomcat . Assurez-vous tout d'abord que Tomcat est arrêté. Ensuite, double-cliquez sur Tomcat9w.exe. Accédez à l'onglet Java. Si vous savez que vous utilisez Windows 64 bits avec Java 64 bits et Tomcat 64 bits, n'hésitez pas à définir une mémoire supérieure à 512. Vous devrez effectuer une analyse du gestionnaire de tâches pour déterminer sa taille. Pour la plupart des applications développées en 2019 ... je recommanderais un pool de mémoire initial de 1024 et un pool de mémoire maximal de 2048. Bien sûr, si votre ordinateur dispose de beaucoup de RAM, n'hésitez pas à aller aussi haut que vous le souhaitez. Voir aussi cette réponse: Comment augmenter la taille maximale du pool de mémoire? Apache Tomcat 9

0
Scott Wardlaw

Le moyen le plus simple de procéder est: (Sous Linux/Ububuntu, e.t.c)

Allez dans le répertoire bin Tomcat:

cd /opt/Tomcat8.5/bin

créez un nouveau fichier dans le répertoire bin "setenv.sh" et enregistrez les entrées de mention ci-dessous.

export CATALINA_OPTS="$CATALINA_OPTS -Xms512m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx2048m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"

et émettre la commande:

./catalina.sh run

Dans votre fichier journal catalina, vous pouvez voir une entrée comme celle-ci:

INFO [main] VersionLoggerListener.log Command line argument: -Xms512m
INFO [main] VersionLoggerListener.log Command line argument: -Xmx2048m
INFO [main] VersionLoggerListener.log Command line argument: -XX:MaxPermSize=256m

Ce qui confirme que les changements ci-dessus ont eu lieu. 

De même, la valeur de "Xms512m" et "-Xmx2048m" peut être modifiée en conséquence dans le fichier setenv.sh.

La mise en service de Tomcat pourrait également se faire en deux étapes. cd /opt/Tomcat8.5/bin

Step #1
run ./setenv.sh 
Step #2
./startup.sh
0
Ammad