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/libTyto 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.soPro 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.