Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 5 Nächste Version anzeigen »

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"

Die VM Parameter aus setenv.bat werden für den Windows Tomcat Dienst nicht verwendet. Sie müssen wie im nächsten Abschnitt erläutert angepasst werden.

Der Installer löscht z.Z. eine vorhandene setenv.bat Datei. Sie muss also nach dem 'Drüber'-Installieren wieder in das Verzeichnis kopiert werden.

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#-XX:+PrintGCTimeStamps#-XX:+HeapDumpOnOutOfMemoryError#-XX:+TraceClassUnloading" --JvmMs=512 --JvmMx=2048 --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.

Wenn man -Xms und -Xms in den --JvmOptions angibt, dann führt das dazu, dass die Parameter 2x an die Tomcat Java VM übergeben werden. Damit ist es nicht klar, welcher Parameter verwendet wird. Daher die Start und Maximal Heap Size ausschließlich über --JvmMs und --JvmMx wie im Beispielskript oben setzen.

Diese Art von Skript wird auch im Windows Installer verwendet, um die VM Parameter des Tomcat Service zu setzen (in org.nuclos.installer.unpack.WindowsUnpacker.register).

 

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"/>
  • Keine Stichwörter