pátek 2. dubna 2010

APR + Tomcat-6.x + libtcnative

Na jednom serveru jsem nedávno instalovat Tomcat6, přesně apache-tomcat-6.0.26.tar.gz. Po spuštění serveru jsem v logu vídal INFO hlášku o tom, že nemůže načíst APR knihovnu. Nevěnoval jsem tomu pozornost do doby než mi napsal kolega mail a tak jsem to začal nějak řešit.

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /opt/java/jdk1.6.0_18/jre/lib/i386/client:/opt/java/jdk1.6.0_18/jre/lib/i386:/opt/java/jdk1.6.0_18/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib

Tyto cesty jsou evidentě defaultně načtené, některé ani neexistují.

První cesta vedla na stránky projektu kde se o APR něco píše, zaměřil jsem se na instalaci pod Linuxem.

Pro funkční kompilaci je třeba do systému Linux Ubuntu Server 8.04.4 nainstalovat pár balíčků.

apt-get install libapr1
apt-get install libapr1-dev
apt-get install libaprutil1
apt-get install libaprutil1-dev

APR je zkratka "The Apache Portable Runtime Library" podrobně popsáno na WiKi.

Manuální kompilaci a instalaci lze provádět např. takto.

./tomcatctl stop
cd /opt/apache-tomcat-6.0.26/bin
tar xvzf tomcat-native.tar.gz
cd tomcat-native-1.1.20-src/jni/native
./configure --with-apr=/usr/bin/apt-config
nebo
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=$JAVA_HOME --with-ssl=yes
make
make install

v adresáři /usr/local/apr/lib/ se po instalaci objeví potřebná knihovna libtcnative-1.so

Pro funkční načtení knihovny jsem ještě nastavil patřičnou JAVA proměnnou.

JAVA_OPTS="-Djava.library.path=/usr/local/apr/lib"

Pro funkční běh jsem ještě musel lehce poladit server.xml aby tomcat vubec naběhl. Některé direktivy už nejsou asi platné.

Stávající nastaveni konektoru mám pro Tomcat5.

port="8019" protocol="AJP/1.3"
enableLookups="false"
useBodyEncodingForURI="true"
acceptCount="256"
maxThreads="500"
emptySessionPath="true"


Takovou malou zajimavostí, alespoň pro mě je, že s použitím APR se zjevně používá jiný Conector, přičemž definice v konfiguračním souboru je stejná. U Tomcatu bez APR se používá JK konektor a při použití APR se startuje Coyote JK. Některé části Tomcatu ještě zjevně nemám probádané a toto chování mě lehce rozhodilo. Každopádně jsem zvědav zda s APR získám větší výkon.

Důkladně jsem si přečetl BUILDING, kde se píše o přenastaveni konektoru

protocol="org.apache.coyote.http11.Http11AprProtocol"
protocol="org.apache.coyote.ajp.AjpAprProtocol" = protocol="AJP/1.3"

Od verze Ubuntu Intrepid je k dispozici balík libtcnative-1, ten je, použitelný v případě, že používáme tomcat jako balík v systému, což není můj případ. Takže manuální kompilaci se nevyhneme. Ikdyž použít starší verzi Apache Tomcat Native library je možné. Alespoň verze 1.1.19 mi s Tomcat 6.0.26 fungovala s tím že v dané verzi tomcatu je Apache Tomcat Native library 1.1.20. Takže by mělo být asi možné provozovat balíčkovou verzi Apache Tomcat Native library s manuální instancí Tomcatu6.

Loaded APR based Apache Tomcat Native library 1.1.20

Ve FreeBSD je port /www/tomcat-native. Použití na tomto systému jsem zatím netestoval.

Žádné komentáře: