Wo kann man Java-Heap-Optionen (zB -Xmx) für Tomcat 6 unter Ubuntu 9.04 einstellen?

36

Ich verwende Tomcat mit dem Tomcat6-Paket von Ubuntu 9.04, das Tomcat mit jsvc zu einem Daemon macht. Ich würde gerne wissen, wie man Java-Heap-Optionen wie -Xmxfür Tomcat richtig einstellt . Ich möchte die Konfiguration dort platzieren, wo es am stilistischsten ist und wo es am unwahrscheinlichsten ist, dass sie von Ubuntu-Paketaktualisierungen überschrieben wird.

Die Optionen, die ich gerade sehe:

  • Codiere sie irgendwo in /etc/init.d/tomcat6.
  • Codiere sie irgendwo in /usr/share/tomcat6/bin/catalina.sh.
  • Erstellen Sie eine Zeile in /usr/share/tomcat6/bin/startup.sh, um CATALINA_OPTS mit den gewünschten Flags zu versehen, und exportieren Sie dann CATALINA_OPTS als Umgebungsvariable. (Es sieht so aus, als würde es von abgeholt werden catalina.sh.)

Die letzte Option klingt nach der besten und wird (ohne Begründung) bei der Erhöhung des Java-Heapspeichers im Tomcat-Startskript empfohlen . Aber ich wollte eine zweite Meinung einholen. Möchte jemand bestätigen, dass es keinen besseren Weg gibt?

Chris
quelle

Antworten:

37

Zumindest unter Ubuntu 10.04 gibt /etc/init.d/tomcat6 / etc / default / tomcat6 an, falls vorhanden. Hier setze ich meine Außerkraftsetzungen und ich glaube, es ist im Allgemeinen die "genehmigte" Art, solche Änderungen vorzunehmen.

Natacado
quelle
7
/ etc / default / tomcat6 ist der richtige Ort
Amala
+1 Die Konfiguration sollte nach Möglichkeit immer durchgeführt werden /etc.
Marcus Downing
2
Unter CentOS war der Speicherort, den ich gefunden habe, /etc/tomcat6/tomcat6.conf
khylo
1
Bei CentOS 6.4 /etc/tomcat6/tomcat6.confhandelt es sich um eine große Datei, und ich wollte meine persönlichen Anpassungen nicht dort $CATALINA_HOME/bin/setenv.sheinfügen , also habe ich sie erstellt und als Quelle verwendet /usr/sbin/tomcat6. Hoffe, das hilft CentOS-Benutzern (ja, ich weiß, dass die ursprüngliche Frage für Ubuntu war).
DuffJ
@khylo yep, brauchte eine Weile, um es herauszufinden. In CentOS scheint /etc/init.d/tomcat6 / usr / sbin / tomcat6 aufzurufen, das NICHT catalina.sh aufruft, sondern einfach die tomcat-Bootstrap-Klasse direkt aufruft (im Gegensatz zu Ubuntu /etc/init.d/tomcat6) ruft catalina.sh)
Eran Medan
16

Wenn Sie in das bin-Verzeichnis Ihrer Installation schauen, sehen Sie catalina.sh- oder .bat-Skripte. Wenn Sie sich diese ansehen, werden Sie feststellen, dass sie ein Skript setenv.sh bzw. setenv.bat ausführen, um Umgebungsvariablen festzulegen, sofern es vorhanden ist. Die relevanten Umgebungsvariablen sind in den Kommentaren oben in catalina.sh/bat beschrieben. Erstellen Sie dazu beispielsweise eine Datei $ CATALINA_HOME / bin / setenv.sh mit Inhalten

export JAVA_OPTS="-server -Xmx512m"

Für Windows benötigen Sie in setenv.bat so etwas wie

set JAVA_OPTS=-server -Xmx768m

Dies gilt von Tomcat 5.5 bis 7. Die ursprüngliche Antwort lautet https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-ohne-verwendung-der-Konfigurationsprogra

viper33m
quelle
1
Funktioniert gut für Systeme ohne / etc / default / include, zB FreeBSD.
Vadipp
7

Suchen Sie nach /etc/tomcat6/tomcat6.conf , in der JAVA_OPTS zum Entkommentieren bereitsteht (aber nur, wenn Sie es überhaupt haben, verwende ich Centos und nicht 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
quelle
4
Dies scheint für die CentOS / yum / RPM-Version von Tomcat korrekt zu sein. Für das Ubuntu / apt-get-Paket ist setenv.sh der richtige Weg, um AFAIK
Eran Medan
ja, KCD ist korrekt, denn centOS tomcat6.conf funktioniert gut. Überprüft mit dem Befehl ps aux | grep tomcat zeigt den parameter mit den von mir eingestellten werten an .
Manikandan Arunachalam
2

Die eleganteste Möglichkeit, die ich bisher gefunden habe, besteht darin, /etc/init.d/tomcat6 zu bearbeiten und dies oben in die Datei einzufügen:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

Die anderen Optionen, die ich in meiner Frage umrissen habe, scheinen nicht zu funktionieren. Nach dem Studium des Skripts und weiteren Experimenten bezweifle ich nun, dass /usr/share/tomcat6/bin/catalina.sh und /usr/share/tomcat6/bin/startup.sh beim Tomcat-Start mit dem Tomcat6-Ubuntu-Paket eine Rolle spielen. Stattdessen; Die Datei /etc/init.d/tomcat6 ersetzt vollständig alle Arbeiten, die normalerweise von catalina.sh/startup.sh ausgeführt werden.

Ich bin immer noch ein wenig besorgt, dass ich diese Konfigurationsoptionen in einem zukünftigen Paket-Update verlieren könnte, aber ich denke, wenn das passiert, wäre es ziemlich einfach, sie wiederherzustellen.

Chris
quelle
Kann dies in der .bashrc-Datei für jeden Benutzer festgelegt (exportiert) werden, unter dem Tomcat ausgeführt werden soll? [bitte entschuldigen Sie die schreckliche Grammatik] Das würde Aktualisierungen des Tomcat-Pakets usw. überleben. Ich gehe davon aus, dass die "run-as" -Funktion in init die normale Shell für diesen Benutzer startet und die Zuweisung aufnimmt. Siehe auch howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu
David J. Liszewski