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同様、その有効性と? 具合がないことを確? してから採用するようにするべきです。

You can leave a comment, or trackback from your own site. RSS 2.0

One comment

  1. nike basketball shoes from 2009 says:

    I precisely wanted to thank you so much all over again. I am not sure the things I could possibly have sorted out in the absence of those tips and hints discussed by you directly on such a area of interest. It had been the hard condition in my opinion, however , discovering a well-written technique you resolved it took me to cry with happiness. I will be happy for this information and believe you are aware of an amazing job you were carrying out instructing most people by way of your blog post. Probably you haven’t met all of us.

    12月 14th, 2017 at 23:02:24

Leave a comment