Apache Tomcatのコネクター部分(クライアントからの接続を待ち受けるところ)はAPR(5.5、6.0)やNIO(6.0)でパフォーマンスがあがるらしい。ぜひやってみよう。今使っているTomcat君は5.5.27であるのでAPRを使ってみる。Vine Linux 4.2で。

Vine Linux 4.2にはapr-devel 1.2.7が用意されているのでaptでもらってくる。openssl-develなんてデフォで入っている想定。
今回、CATALINA_HOMEは/usr/local/tomcat、JAVA_HOMEは/usr/local/javaである。Tomcat 5.5.27のバイナリについてくるtomcat-nativeは1.1.12という事で、検索するとconfigureがうまくいかない可能性があるらしい。autoconfを一回実行すれば大丈夫という情報があったのでやってみた。

# cd /tmp
# tar xzf /usr/local/tomcat/bin/tomcat-native.tar.gz
# cd tomcat-native-1.1.12-src/jni/native
# autoconf
# ./configure --prefix=/usr/local/tomcat --with-apr=/usr/bin --with-ssl=/usr/lib --with-java-home=/usr/local/java
# make
# make install

正直、–with-aprと–with-sslはこういう指定で良いのか分からん。一応動いているのでよしとする。–with-ssl=/usrだとビルドはできるが組み込んで実行するとjava.lang.UnsatisfiedLinkError: undefined symbol: SSL_callback_tmp_DHなどと言われた。
さて、上記の方法で/usr/local/tomcat/libの中にlibtcnative-1.so.0.1.12などというファイルができあがる。後はTomcatがこいつを見つけられるようにLD_LIBRARY_PATHに入れるかldconfig的な事を行う。今回はLD_LIBRARY_PATHに追加してからTomcatを起動するようにする。後、うちはTomcatはjsvc化しているためcatalina.shだと違うかも。

ついでに、今うちで使っている/etc/init.d/tomcat。ネットからもらってきて少しカスタマイズした

#!/bin/sh
#
# tomcat Startup script for the Apache Tomcat Server
#
# chkconfig: 2345 80 20
# description: The Apache Tomcat Server.

. /etc/rc.d/init.d/functions

prog=Tomcat
JAVA_HOME=/usr/local/java
CATALINA_HOME=/usr/local/tomcat
TOMCAT_USER=tomcat
CATALINA_BASE=$CATALINA_HOME
JSVC=/usr/local/bin/jsvc

# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/tomcat.pid

CLASSPATH=$JAVA_HOME/lib/tools.jar:
$CATALINA_HOME/bin/commons-daemon.jar:
$CATALINA_HOME/bin/bootstrap.jar
BOOTCLASS=org.apache.catalina.startup.Bootstrap
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH

CATALINA_OPTS=-Xmx128m"

function start() {
action "Starting $prog: " $JSVC 
 -user $TOMCAT_USER 
 -home $JAVA_HOME 
 -jvm server 
 -Dcatalina.home=$CATALINA_HOME 
 -Dcatalina.base=$CATALINA_BASE 
 -Djava.io.tmpdir=$TMP_DIR 
 -wait 30 
 -pidfile $PID_FILE 
 -outfile $CATALINA_HOME/logs/tomcat.log 
 -errfile $CATALINA_HOME/logs/tomcat.err 
 $CATALINA_OPTS 
 -cp $CLASSPATH 
 $BOOTCLASS

#
# To get a verbose JVM
#-verbose 
# To get a debug of jsvc.
#-debug 
}

function stop() {
action "Stopping $prog: " $JSVC 
 -stop 
 -pidfile $PID_FILE 
 $BOOTCLASS
}

case "$1" in
start)
#
# Start Tomcat
#
start
exit $?
;;

stop)
#
# Stop Tomcat
#
stop
exit $?
;;

restart)
#
# Restart Tomcat
#
stop
start
exit $?
;;

*)
echo "Usage $prog start/stop/restart"
exit 1;;
esac