Ein Performanceproblem kann auftreten wenn Tomcat1 nicht weiß wieviel Arbeitsspeicher Ihr Server wirklich bereit hält. Hierzu wird man sich immer voll und ganz auf Ihre Konfigurationen verlassen und dementsprechend handeln. Wenn diese nicht gewissenhaft durchgeführt wurde, kann es unter anderem vorkommen, dass der Aufbau von sogenannten JavaServer Pages enorm verlangsamt wird. Dies ist nicht immer auf den Tomcat selbst oder einer ineffizienten programmiertechnischen Entwicklung zurück zu führen.
Hinweis:
Die hier beschriebene Speicherverwaltung lässt sich erst ab der Tomcat Version 5.5.15 realisieren und konzentriert sich auf die Linux-Architektur!
Auch wenn Tomcat einige gewisse Schwierigkeiten mit dem Umgang von großen JavaServer Pages mit sich bringt, so hilft der Kniff des Mitteilens, wieviel Arbeitsspeicher Ihr Server besitzt. Solche Angaben werden mit Hilfe der Variable CATALINA_OPT realisiert, die sich optional mit starten von Tomcat einbinden lässt. Dazu ist im Vorfeld eine Datei anzupassen. Sollte diese noch nicht vorhanden sein, erstellen Sie diese bitte:
$CATALINA_HOME/bin/setenv.sh
Neben anderen optionalen Parametern, auf die in diesem Beitrag aber kein Bezug genommen wird, soll es im folgendem um das Setzen der Variable für die Verwaltung des Arbeitsspeichers gehen. Der Inhalt dieser Datei, wird unter Linux wie folgt befüllt:
export CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Xms256m -Xmx2048m -XX:MaxPermSize=512m
Zunächst dient die Angabe von org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER für die Möglichkeit der Verwaltung des Arbeitsspeicher. Diese ist hierzu auf true zu setzen und steht erst ab der Tomcat-Version 5.5.15 zur Verfügung. Die nachfolgenden Attribute sind wie folgt zu verstehen:
-Xms256m (Mininum des Java Heap)
-Xmx2048m (Maximum des Java Heap)
-XX:MaxPermSize=512m (Permanent Generations Größe)
Die Angabe von -Xmx2048m verrät die Größe des RAMs. Stellen Sie diesen unter Linux zwingend auf den maximal zulässigen Arbeitsspeicher. Warum?, dies ist auf die Linux-Architektur zurück zu führen, welche den Arbeitsspeicher permanent und vollständig im Gebrauch hält. Sollte Tomcat nun nicht wissen, wieviel Arbeitsspeicher insgesamt zur Verfügung steht, wird er diesen auch nicht „beantragen”. Ist der Arbeitsspeicher zu diesem Zeitpunkt aber voll, so kann es zu merklichen Performance-Verlusten führen, da Tomcat selbst keinen freien Speicher findet. Linux bedient sich in diesem Fall des Auslagerns (SWAP). Wenn Tomcat weiß wieviel Arbeitsspeicher Sie wirklich besitzen, so wird bei Bedarf versucht, diesen auch zu allokieren. Der Linux-Kernel weiß nun das er viel zu viel Arbeitsspeicher hält und wird alte Daten Auslagern und Tomcat den RAM zusichern der gebraucht wird.
Mit einem Start oder Neustart von Tomcat wird die so eben angelegte, beziehungsweise angepasste Datei aufgerufen und Tomcat mit den entsprechenden Einstellungen gesetzt.
