...
| Auszug |
|---|
...
|
...
Änderungen an den Java VM Start Parametern sind eine Maßnahme des Performancetuning und der Leistungsverbesserung. Durch diese Änderungen können u.A. OutOfMemoryErrors vermieden werden, wie sie z.B. durch einen zu kleinen 'PermGen Space' entstehen können.
| Warnung |
|---|
Auf 32-bit Betriebssystemem sollte die Max Heap Size (-Xmx) auf höchstens 1536m eingestellt werden. Details finden sich hier. |
| Info |
|---|
Während die Oracle Implementierung von Java immer Heap-Size limitiert ist, stellt IBM auch VMs ohne diese Limitierung zur Verfügung. Daneben gibt es auch normale VM Implementierungen von IBM. |
setenv.sh und setenv.bat
Die Java VM Start Parameter können verändert werden, indem Sie im Tomcat Installationsverzeichnis im Ordner 'bin' die Datei 'setenv.sh' (Linux) bzw. 'setenv.bat' (Windows) anlegen. In dieser Datei können Sie einige Umgebungsvariablen setzen, die dann beim Starten herangezogen werden. Diese Umgebungsvariablen sind in der (schon vorhandenen) Datei 'catalina.sh' bzw. 'catalina.bat' dokumentiert.
...
| |
Nuclos Tomcat: setenv.sh, --JvmMx, JMX, NIO Connector, keytool, server.xml, tomcat-users.xml, Manager, CATALINA_HOME, Performance. |
Sprache: Deutsch · English
Tomcat für Nuclos betreiben und tunen – VM-Parameter, Windows-Dienst, NIO-Connector, HTTPS, Manager-Deployment und mehr.
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Status | ||||
|---|---|---|---|---|
|
| Panel | ||||||
|---|---|---|---|---|---|---|
| ||||||
Auf dieser Seite
|
Diese Seite bündelt fortgeschrittene Tomcat-Themen für Performance und Betrieb. In einer Nuclos-Installation liegt Tomcat unter <nuclos>/tomcat/apache-tomcat-<version>
...
.
Über die VM-Parameter steuerst du Heap und GC (Performance-Tuning, Vermeidung von OutOfMemoryError). Auf 32-bit-Systemen -Xmx auf höchstens 1536m setzen. Am einfachsten über eine Datei setenv.sh (Linux) bzw. setenv.bat (Windows) im bin-Verzeichnis:
| Codeblock | ||
|---|---|---|
|
Vorschlag für eine setenv.sh Datei (Linux):
...
# Created by Thomas Pasch
# see catalina.sh for explanation
JAVA_OPTS=""
CATALINA_OPTS="-server -ea -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+UseThreadPriorities -Xmx1236m -Xms512m -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:+TraceClassUnloading"
# http://www.theserverside.com/discussions/thread.tss?thread_id=63241
#-Xloggc:$CATALINA_HOME/logs/gc.log or Xloggc:%CATALINA_HOME%/logs/gc.log
#-XX:+PrintHeapAtGC
#-XX:+PrintGCDetails
#-XX:+PrintGCTimeStamps
#-XX:-HeapDumpOnOutOfMemoryError
#-XX:+UseConcMarkSweepGC
#-XX:-TraceClassUnloading
# http://stackoverflow.com/questions/202502/appropriate-tomcat-5-5-start-up-parameters-to-tune-jvm-for-extremely-high-demand
# http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html
# http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html |
Vorschlag für eine setenv.bat Datei (Windows):
| Codeblock |
|---|
rem Created by Thomas Pasch
rem see catalina.sh for explanation
set "JAVA_OPTS="
set "CATALINA_OPTS=-ea -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+UseThreadPriorities -Xmx1236m -Xms512m -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:+TraceClassUnloading" |
| Warnung |
|---|
Die VM Parameter aus |
| Warnung |
|---|
Der Installer löscht z.Z. eine vorhandene |
| Info | ||
|---|---|---|
Eine Alternative zu dem Anlegen einer
|
Das Modifizieren des von Nuclos installierten Dienstes ist mit folgendem Windows Script möglich:
| Warnung | ||
|---|---|---|
| ||
Für den Windows-Dienst gilt |
Die VM-Parameter des installierten Dienstes werden per Skript gesetzt. Start-/Max-Heap ausschließlich über --JvmMs/--JvmMx (nicht zusätzlich über -Xms/-Xmx, sonst doppelte Übergabe). Die JMX-Parameter sind nötig, um den Serverprozess mit jvisualvm zu überwachen (siehe Speicherabbild):
| Codeblock | ||
|---|---|---|
|
...
set CATALINA_HOME=C:\Nuclos3.6\tomcat\apache-tomcat-7.0.28
set CATALINA_BASE=%CATALINA_HOME%
set JAVA_HOME=C:\Program Files\Java\jre6
C:\Nuclos3.6\bin\nuclosx64.exe //US//nuclos.nuclos --JvmOptions "-Dcom.sun.management.jmxremote.port=30333#-Dcom.sun.management.jmxremote.ssl=false#-Dcom.sun.management.jmxremote.authenticate=false#-Dcatalina.base=%CATALINA_BASE%#-Dcatalina.home=%CATALINA_HOME%#-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed#-Djava.io.tmpdir=%CATALINA_BASE%\temp#-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager#-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties#-ea#-XX:PermSize=128M#-XX:MaxPermSize=256M#-XX:+UseThreadPriorities#-XX:+PrintGCTimeStamps#-XX:+HeapDumpOnOutOfMemoryError#-XX:+TraceClassUnloading" --JvmMs=512m --JvmMx=2048m --StartMode=jvm --StopMode=jvm --Startup=manual --Classpath "%JAVA_HOME%/lib/tools.jar;%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_HOME%\bin\tomcat-juli.jar" --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop |
Erläuterungen:
nuclos.nuclos' ist der Dienstnahme. Der Teil hinter dem Punkt ist der im Installer angegebene Nuclos Instanzname. Dieser kann bei Ihnen anders lauten.--Startup=manual' ist '--Startup=auto'. Dann wird der Dienst beim Starten des Betriebssystems automatisch gestartet.-ea' beispielhaft. Die Parameter davor sind dagegen verpflichtend.-server' Flag. Deshalb ist es auch nicht angegeben.Weiterführende Informationen zum Tomcat als Windows Dienst sind im Howto zu finden.
| Warnung |
|---|
Wenn man Die 3 angegebenen JMX Parameter sind wichtig, um mit der Die gesetzten Java VM Parameter sollte man ausprobieren, bevor man den Service wie hier beschrieben verändert. Denn setzt man z.B. -Xmx zu groß, dann startet der Service nicht, kann aber auch nicht gestoppt werden, so dass ein Reboot fällig wird. |
| Info |
|---|
Die für Windows zusätzlich angegebenen JMX Parameter ( |
| Info |
|---|
Diese Art von Skript wird auch im Windows Installer verwendet, um die VM Parameter des Tomcat Service zu setzen (in |
Der NIO Connector bietet einige Feature (siehe AIO) und bessere Performance. In conf/server.xml statt:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
folgendes eintragen:
...
| Info | ||
|---|---|---|
| ||
VM-Parameter erst testen: Ist |
In conf/server.xml das Protokoll auf den NIO-Connector umstellen (bessere Performance):
| Codeblock | ||
|---|---|---|
| ||
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> |
...
Keystore erzeugen und Connector konfigurieren:
Weiter Informationen enthält eine Übersicht über die wichtigsten Tomcat Connectors.
Für optimale Performance in der Produktion. Zunächst müssen (unter Ubuntu) die Pakete libssl-dev und libapr1-dev installiert werden. Danach lässt sich tomcat-native unter Linux recht schnell bauen.
| Codeblock |
|---|
cd <tomcat-native-...>/jni/native
./configure --with-ssl --with-apr=/usr/bin/apr-1-config --prefix=/home/tpasch2/apache-tomcat-7.0.59 --with-java-home=/usr/lib/jvm/java-8-oracle
make
make install
make clean |
Für die Benutzung in Eclipse/STS in der Tomcat 'Launch Configuration' im Reiter 'Environment' die Variable 'LD_LIBRARY_PATH' mit dem Wert '/home/tpasch2/apache-tomcat-7.0.29' (d.h. der --prefix Wert aus ./configure) eintragen.
Weiterführende Informationen Tomcat Native und Tomcat APR.
Das Tomcat Access Log ist konfigurierbar. Hier ist es u.A. möglich, die Verarbeitungszeit und die Länge der Antwort zu loggen. Details finden sich hier.
Durch das Konfigurieren von Valves ist es möglich, sehr viele weitere Informationen (z.B. Informationen zum SSL Handshake, langsame Threads) zu loggen.
Einige Servlet Filter werden direkt vom Tomcat zur Verfügung gestellt und können (durch eine Konfiguration in web.xml) verwendet werden, um z.B. die Länge der Anfrage in Bytes zu loggen. Eine Übersicht findet sich hier.
Zertifikat erstellen mit:
| Codeblock | ||
|---|---|---|
|
keytool -genkeypair -keystore .keystore -alias mykey -storepass storepw -keypass keypw |
...
Dann in server.xml den entsprechenden Connector konfigurieren:
...
| Codeblock | ||
|---|---|---|
| ||
<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/ |
...
path/.keystore" keystorePass="storepw" keyPass="keypw" keyAlias="mykey" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS"/> |
...
| Hinweis | ||
|---|---|---|
|
...
Der Installer richtet HTTPS |
...
in |
...
|
...
|
Dies kann man durch ein Trennen des Tomcats in CATALINA_HOME (die Installation) und CATALINA_BASE (einige Konfigurationsdateien u.a.) erreichen. Nähere Informationen finden sich hier.
...
...
Der Tomcat-Manager erlaubt das Deployen von WARs (auch remote). Dazu tomcat-users.xml in CATALINA_BASE/conf
...
anpassen
...
:
| Codeblock | ||
|---|---|---|
| ||
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user password="nuclos" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" username="nuclos"/>
</tomcat-users> |
...
Da die Nuclos-WARs
...
groß sind,
...
in CATALINA_HOME/webapps/manager/WEB-INF/web.xml
...
max-file-size (und
...
ggf. max-request-size)
...
erhöhen.
...
CATALINA_HOME und CATALINA_BASE.Der Tomcat unterstützt mehrere Methoden des Hot Deployments, u.a. den Manager (s.o.) und autoDeploy, bei denen auf Änderungen im Dateisystem reagiert wird. Details finden sich hier und da.
Mit einer geschickten Wahl der Java VM Startparameter (und weiteren Maßnahmen) ist es möglich, für die Entwicklung das Hot Deployment Verhalten des Tomcats entscheidend zu verbessern.
Wiki Eintrag von Oliver: JS WebClient Entwicklungsumgebung
Details: https://ducquoc.wordpress.com/2010/11/06/eclipse-wtp-tomcat-hot-deploy/