Archive for 5月, 2010

5月 6th, 2010

TomcatNativeの有効怜

Posted in Tomcat by admin

 Tomcatにぜ TomcatNativeというライブラリが付属していますが、デフォルト設? では有効になっていません。TomcatNativeとは、Tomcat(JVM)からJNI(JavaNativeInterface)経由ぜ Apacheぜ ApachePortableRuntime(APR)を利用出来るようにするライブラリです。APRはもともとクロスプラットフォームぜ Apacheの関数群ですが、JVMよりもOSカーネルに蜿 い空間で動作するので、パフォーマンスの向上が期待出来るという゜ けです。APRにはファイル入出力、共有メモリ、ロック、ソケット等の? 能を含んでいます。以? のような朧 成となります。

javaプロセ゜ (Tomcat)
↓ JNI
libtcnative-1.so(TomcatNative)
↓
libapr-1.so(APR)

 TomcatNativeのソースは、Tomcatアーカイブぜ binディレクトリ配下にあるtomcat-native.tar.gzファイルの中にあります。このアーカイブにはネイティブぜ Javaの両方のコードが含まれています。展開、ネイティブパートのコンパイル、Tomcatへの設定圏 映手順の? は以下のようになります。

# cd /usr/local/tomcat/bin
# tar zxf tomcat-native.tar.gz
# cd tomcat-native-1.1.16-src/jni/native
# ./configure --with-apr=/usr --with-java-home=/usr/jdk --prefix=/usr/local/tomcat
# make
# make install
# ldd /usr/local/tomcat/lib/libtcnative-1.so
        libssl.so.6 => /lib64/libssl.so.6 (0x00002aaaaacdd000)
        libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002aaaaaf26000)
        libapr-1.so.0 => /usr/lib64/libapr-1.so.0 (0x00002aaaab26e000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aaaab496000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaab6b0000)
        libc.so.6 => /lib64/libc.so.6 (0x00002aaaab8b4000)
        libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002aaaabc05000)
        libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002aaaabe33000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002aaaac0c5000)
        libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002aaaac2c8000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00002aaaac4ed000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00002aaaac701000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002aaaac905000)
        /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
        libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002aaaacb39000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002aaaacd41000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00002aaaacf44000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00002aaaad159000)
        libsepol.so.1 => /lib64/libsepol.so.1 (0x00002aaaad372000)

# vi /usr/local/tomcat/bin/setenv.sh
  (LD_LIBRARY_PATHぜ /usr/local/tomcat/libを追加)

# vi /usr/local/tomcat/conf/server.xml
  (<listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />追? )

# /usr/local/tomcat/bin/startup.sh
# grep -i APR /usr/local/tomcat/logs/catalina.out
Apr 22, 2010 7:30:43 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.16.
Apr 22, 2010 7:30:43 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

# cat /proc/<pid>/maps | grep libtcnative
2aaabcf82000-2aaabcfa1000 r-xp 00000000 08:08 1487410 /usr/local/tomcat/lib/libtcnative-1.so.0.1.16
2aaabcfa1000-2aaabd1a0000 ---p 0001f000 08:08 1487410 /usr/local/tomcat/lib/libtcnative-1.so.0.1.16
2aaabd1a0000-2aaabd1a2000 rwxp 0001e000 08:08 1487410 /usr/local/tomcat/lib/libtcnative-1.so.0.1.16

# /usr/jdk/bin/jinfo <pid> | grep java.library.path
java.library.path = /usr/jdk/jre/lib/amd64/server:/usr/jdk/jre/lib/amd64:/usr/jdk/jre/../lib/amd64::\
/usr/local/tomcat/lib:/usr/java/packages/lib/amd64:/lib:/usr/lib

 上記のようぜ catalina.outぜ INFOログ、/procぜ mapsでもライブラリのロードが確? できれぜ TomcatNativeが有効になっています。TomcatNativeを有効にすることぜ server.xmlに設定可能なコネクタ? 性が増えるようですが、useSendfile属性などデフォルトで有効のようなので? 旦そのままにしています。
 また、AJPコネクタでぜ HTTPコネクタのようぜ sendfileの? 能を使用できません。従って、TomcatをApacheをリバースプロキシとしたAPサーバとして利用する場合ぜ ApacheNativeの有効性は? いと? えます。Tomcatでスタンドアローボ HTTPサーバとして利用した場合やTomcatぜ openSSLを使用する場合に、その有効性が高ぜ なるのではないでしょうか。

—————————————————————————————————————–

 次ぜ TomcatNative有効・無効時パフォーマンス? 較を実施してみたいと思います。よりパフォーマンス? の有効性が確? 出来そうなファイボ I/Oやソケット周りを中? に? 証する為、Tomcatぜ HTTPコネクタを利用して? 定サイズの静的画? ファイルをクライアントから圏 得する操作を実施してみました。結果が以? になります。

tnative_32_64

 以前Apacheぜ EnableSendfileを検証しましたが(Sendfileのパフォーマン゜ )、その時と同じx86_64環? に加え、32bitの環? でも調査しています。Apache EnableSendfile検証時は有効性を確? 出来なかったのですが、今回の? 証では特ぜ 32bit環? において極゜ ずかながら性能の向上を確? 出来ました。同時リクエスト数の? い大? 模サービスで利用する場合、この地 しの性能差が生きてぜ るのではないでしょうか?(大? 模サービスぜ Tomcatスタンドアローンはなさそうですが・・?
 今回の? 果については、環? により異なる可能性が大きいです。Apacheぜ EnableSendfile同様、その有効性と? 具合がないことを確? してから採用するようにするべきです。