Weiß Tomcat wieviel RAM Sie besitzen?

Gepostet von Frank Gottschlich am Jan 15, 2010 in Java, Linux / Unix | Keine Kommentare

Ein Per­for­mance­pro­blem kann auf­tre­ten wenn Tom­cat1 nicht weiß wie­viel Arbeits­spei­cher Ihr Ser­ver wirk­lich bereit hält. Hierzu wird man sich immer voll und ganz auf Ihre Kon­fi­gu­ra­tio­nen ver­las­sen und dem­ent­spre­chend han­deln. Wenn diese nicht gewis­sen­haft durch­ge­führt wurde, kann es unter ande­rem vor­kom­men, dass der Auf­bau von soge­nann­ten Java­Ser­ver Pages enorm ver­lang­samt wird. Dies ist nicht immer auf den Tom­cat selbst oder einer inef­fi­zi­en­ten pro­gram­mier­tech­ni­schen Ent­wick­lung zurück zu führen.

Hin­weis:
Die hier beschrie­bene Spei­cher­ver­wal­tung lässt sich erst ab der Tom­cat Ver­sion 5.5.15 rea­li­sie­ren und kon­zen­triert sich auf die Linux-Architektur!

Auch wenn Tom­cat einige gewisse Schwie­rig­kei­ten mit dem Umgang von gro­ßen Java­Ser­ver Pages mit sich bringt, so hilft der Kniff des Mit­tei­lens, wie­viel Arbeits­spei­cher Ihr Ser­ver besitzt. Sol­che Anga­ben wer­den mit Hilfe der Varia­ble CATALINA_OPT rea­li­siert, die sich optio­nal mit star­ten von Tom­cat ein­bin­den lässt. Dazu ist im Vor­feld eine Datei anzu­pas­sen. Sollte diese noch nicht vor­han­den sein, erstel­len Sie diese bitte:

$CATALINA_HOME/bin/setenv.sh

Neben ande­ren optio­na­len Para­me­tern, auf die in die­sem Bei­trag aber kein Bezug genom­men wird, soll es im fol­gen­dem um das Set­zen der Varia­ble für die Ver­wal­tung des Arbeits­spei­chers gehen. Der Inhalt die­ser 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ög­lich­keit der Ver­wal­tung des Arbeits­spei­cher. Diese ist hierzu auf true zu set­zen und steht erst ab der Tomcat-Version 5.5.15 zur Ver­fü­gung. Die nach­fol­gen­den Attri­bute sind wie folgt zu verstehen:

-Xms256m (Mini­num des Java Heap)
-Xmx2048m (Maxi­mum des Java Heap)
-XX:MaxPermSize=512m (Per­ma­nent Gene­ra­ti­ons Größe)

Die Angabe von -Xmx2048m ver­rät die Größe des RAMs. Stel­len Sie die­sen unter Linux zwin­gend auf den maxi­mal zuläs­si­gen Arbeits­spei­cher. Warum?, dies ist auf die Linux-Architektur zurück zu füh­ren, wel­che den Arbeits­spei­cher per­ma­nent und voll­stän­dig im Gebrauch hält. Sollte Tom­cat nun nicht wis­sen, wie­viel Arbeits­spei­cher ins­ge­samt zur Ver­fü­gung steht, wird er die­sen auch nicht „bean­tra­gen”. Ist der Arbeits­spei­cher zu die­sem Zeit­punkt aber voll, so kann es zu merk­li­chen Performance-Verlusten füh­ren, da Tom­cat selbst kei­nen freien Spei­cher fin­det. Linux bedient sich in die­sem Fall des Aus­la­gerns (SWAP). Wenn Tom­cat weiß wie­viel Arbeits­spei­cher Sie wirk­lich besit­zen, so wird bei Bedarf ver­sucht, die­sen auch zu allo­kie­ren. Der Linux-Kernel weiß nun das er viel zu viel Arbeits­spei­cher hält und wird alte Daten Aus­la­gern und Tom­cat den RAM zusi­chern der gebraucht wird.

Mit einem Start oder Neu­start von Tom­cat wird die so eben ange­legte, bezie­hungs­weise ange­passte Datei auf­ge­ru­fen und Tom­cat mit den ent­spre­chen­den Ein­stel­lun­gen gesetzt.

  1. http://tomcat.apache.org/ []

Einen Kommentar schreiben