VM Start Parameter
Ä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.
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.
In einer Nuclos Installation befindet sich das oben erwähnte Verzeichnis unter '<nuclos>/tomcat/apache-tomcat-<version>/bin'.
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 -ms512m -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):
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"
Windows Dienst/Service
Das Modifizieren des von Nuclos installierten Dienstes ist mit folgendem Windows Script möglich:
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 "-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#-Xmx1236m#-Xms512m#-XX:+PrintGCTimeStamps#-XX:+HeapDumpOnOutOfMemoryError#-XX:+TraceClassUnloading" --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.
- Eine Alternative zu '--Startup=manual' ist '--Startup=auto'. Dann wird der Dienst beim Starten des Betriebssystems automatisch gestartet.
- In dem Script sind die VM Start Parameter ab '-ea' beispielhaft. Die Parameter davor sind dagegen verpflichtend.
- Die Java VM für Windows kennt kein '-server' Flag. Deshalb ist es auch nicht angegeben.
- Nein, ich weiss auch nicht, warum diese Änderung unter Windows kompliziert ist.
Weiterführende Informationen zum Tomcat als Windows Dienst sind im Howto zu finden.
NIO Connector benutzen
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:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
Weiter Informationen enthält eine Übersicht über die wichtigsten Tomcat Connectors.
Tomcat Native
Für optimale Performance in der Produktion. Unter Linux recht schnell gebaut mit:
./configure --with-ssl --with-apr=/usr/bin/apr-1-config --prefix=/home/tpasch2/apache-tomcat-7.0.29 --with-java-home=/usr/lib/jvm/jdk1.6.0_34 make make install
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.
Tomcat Logging
Access Log
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.
Erweitertes Logging durch Valves
Durch das Konfigurieren von Valves ist es möglich, sehr viele weitere Informationen (z.B. Informationen zum SSL Handshake, langsame Threads) zu loggen.
Erweitertes Logging durch Servlet Filter
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.
HTTPS, SSL/TLS
Zertifikat erstellen mit:
keytool -genkeypair -keystore .keystore -alias mykey -storepass storepw -keypass keypw
Dann in server.xml den entsprechenden Connector konfigurieren:
<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/home/tpasch2/sslcert/.keystore" keystorePass="storepw" keyPass="keypw" keyAlias="mykey" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS"/>