Où définir les options de segment de mémoire java (par exemple -Xmx) pour Tomcat 6 sous Ubuntu 9.04?

36

J'exécute Tomcat à l'aide du paquet tomcat6 d'Ubuntu 9.04, qui crée un démon de Tomcat à l'aide de jsvc. J'aimerais savoir comment définir les options -Xmxde segment de mémoire Java, comme pour Tomcat. J'aimerais placer la configuration là où elle est la plus stylistiquement correcte et là où elle risque le moins d'être écrasée par les mises à jour de paquets Ubuntu.

Les options que je vois maintenant:

  • Codez-les en dur quelque part /etc/init.d/tomcat6.
  • Codez-les en dur quelque part /usr/share/tomcat6/bin/catalina.sh.
  • Créez une ligne /usr/share/tomcat6/bin/startup.shpour définir les indicateurs souhaités sur CATALINA_OPTS, puis exportez CATALINA_OPTS en tant que variable d'environnement. (On dirait qu'il va être ramassé par catalina.sh.)

La dernière option semble être la meilleure et elle est recommandée (sans expliquer pourquoi) dans Augmentation de l'espace de Java dans le script de démarrage de Tomcat . Mais je voulais avoir un deuxième avis. Quelqu'un veut confirmer qu'il n'y a pas de meilleur moyen?

Chris
la source

Réponses:

37

Au moins sur Ubuntu 10.04, /etc/init.d/tomcat6 utilise / etc / default / tomcat6 s'il existe. C’est là que j’ai mis mes dérogations et je pense que c’est généralement la manière «approuvée» d’apporter de tels changements.

natacado
la source
7
/ etc / default / tomcat6 est le bon endroit
Amala
+1 La configuration doit toujours être effectuée /etcsi possible.
Marcus Downing
2
Sur CentOS, l’endroit que j’ai trouvé est /etc/tomcat6/tomcat6.conf
khylo le
1
Sur CentOS 6.4, le /etc/tomcat6/tomcat6.conffichier est volumineux et je ne voulais pas y insérer mes personnalisations personnelles. Je l’ai donc créé $CATALINA_HOME/bin/setenv.shet recherché /usr/sbin/tomcat6. J'espère que cela aidera les utilisateurs de CentOS (oui, je sais que la question initiale était pour Ubuntu).
DuffJ
@khylo yep, m'a pris un peu de temps pour le comprendre. semble dans CentOS le /etc/init.d/tomcat6 appelle / usr / sbin / tomcat6 qui n’appelle PAS catalina.sh mais appelle simplement la classe de démarrage tomcat directement (par opposition à Ubuntu /etc/init.d/tomcat6 qui appelle catalina.sh)
Eran Medan
16

Si vous regardez dans le répertoire bin de votre installation, vous verrez les scripts catalina.sh ou .bat. Si vous regardez dans ceux-ci, vous verrez qu'ils exécutent respectivement un script setenv.sh ou setenv.bat, s'il existe, pour définir des variables d'environnement. Les variables d'environnement pertinentes sont décrites dans les commentaires en haut de catalina.sh/bat. Pour les utiliser, créez par exemple un fichier $ CATALINA_HOME / bin / setenv.sh avec le contenu

export JAVA_OPTS="-server -Xmx512m"

Pour Windows, vous aurez besoin, dans setenv.bat, de quelque chose comme:

set JAVA_OPTS=-server -Xmx768m

Ceci est vrai des versions de tomcat 5.5 à 7. Réponses originales https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-without-using-the-configuration-progra

Viper33m
la source
1
Fonctionne bien pour les systèmes sans / etc / default / include, par exemple FreeBSD.
vadipp
7

Recherchez le fichier /etc/tomcat6/tomcat6.conf qui contient JAVA_OPTS prêt à attendre le commentaire de votre part (mais si vous en avez un, je n’utilise pas Centos, pas Ubuntu).

# System-wide configuration file for tomcat6 services
# This will be sourced by tomcat6 and any secondary service
# Values will be overridden by service-specific configuration
# files in /etc/sysconfig
#
# Use this one to change default values for all services
# Change the service specific ones to affect only one service
# (see, for instance, /etc/sysconfig/tomcat6)
#
...
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"
KCD
la source
4
Cela semble être correct pour la version CentOS / yum / RPM de tomcat. Pour le paquet Ubuntu / apt-get, setenv.sh est la bonne façon de faire. Pour autant que je sache
Eran Medan
oui, KCD est correct, pour centOS, tomcat6.conf fonctionne bien. Vérifié avec la commande ps aux | grep tomcat il montre le paramètre avec les valeurs que j'ai définies.
Manikandan Arunachalam
2

La manière la plus élégante que j'ai trouvée jusqu'à présent consiste à éditer /etc/init.d/tomcat6 et à l'ajouter en haut du fichier:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

Les autres options que j'ai décrites dans ma question ne semblent pas fonctionner. Après avoir étudié le script et expérimenté davantage, je doute maintenant que /usr/share/tomcat6/bin/catalina.sh et /usr/share/tomcat6/bin/startup.sh jouent un rôle quelconque dans le démarrage de tomcat avec le paquet tomcat6 Ubuntu. Au lieu; Le fichier /etc/init.d/tomcat6 remplace complètement tout travail normalement effectué par catalina.sh/startup.sh.

Je suis encore un peu inquiet de perdre ces options de configuration dans une future mise à jour de paquet, mais je suppose que si cela se produit, il serait assez facile de les restaurer.

Chris
la source
Cela peut-il être défini (exporté) dans le fichier .bashrc pour le type d'utilisateur sous lequel vous voulez que tomcat s'exécute? [Veuillez excuser la grammaire horrible] Cela survivrait aux mises à jour du paquet Tomcat, etc. Voir aussi howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu
David J. Liszewski