TomcatNativeの有効怜
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コネクタを利用して? 定サイズの静的画? ファイルをクライアントから圏 得する操作を実施してみました。結果が以? になります。
以前Apacheぜ EnableSendfileを検証しましたが(Sendfileのパフォーマン゜ )、その時と同じx86_64環? に加え、32bitの環? でも調査しています。Apache EnableSendfile検証時は有効性を確? 出来なかったのですが、今回の? 証では特ぜ 32bit環? において極゜ ずかながら性能の向上を確? 出来ました。同時リクエスト数の? い大? 模サービスで利用する場合、この地 しの性能差が生きてぜ るのではないでしょうか?(大? 模サービスぜ Tomcatスタンドアローンはなさそうですが・・?
今回の? 果については、環? により異なる可能性が大きいです。Apacheぜ EnableSendfile同様、その有効性と? 具合がないことを確? してから採用するようにするべきです。
Comments are closed!