Tomcat有三种运营模式:bio、nio、apr,不同模式下Tomcat的运行效率差别比较大。
一、bio(blockingIO)
阻塞式IO,Tomcat6及以前版本默认运行模式,性能非常低下,没有经过任何优化处理。
二、nio(noblocking IO)
非阻塞式IO,Tomcat7以后的版本默认运行模式,利用java异步IO技术使Tomcat运行性能有所提升。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8543" />
如果要在Tomcat6开启NIO模式,直接修改server.xml里的Connector节点,修改protocol为
org.apache.coyote.http11.Http11NioProtocol,启动生效。<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8543" />
Tomcat8默认配置启动完后最后三行日志如下:
http-nio-8180
ajp-nio-8109
说明默认以nio模式运行。
三、apr(Apache Portable Runtime)
从操作系统级别来解决异步的IO问题,大幅度的提高性能。
必须要安装apr和native,直接启动就支持apr。
安装apr
apr需要APR库和OpenSSL相关库。
yum install apr-devel openssl-devel
安装native
进入Tomcat的bin目录,比如:
/opt/soft/tomcat_8180/bin
解压native源码包
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.32-src/jni/native
./configure--with-apr=/usr/bin/apr-1-config--with-java-home="/opt/soft/jdk1.8.0_60" --with-ssl=yes
make
make install
native 会被安装到/usr/local/apr/lib
我们需要把/usr/local/apr/lib/ libtcnative-1.so.0.1.32指向Tomcat可识别路径。
配置apr包到Tomcat可识别的路径
15-Apr-2016 22:18:54.209 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent
The APR based Apache Tomcat Native library which allows optimal performance in production environments
was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Tomcat8默认apr是开启的,配置在server.xml
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
是由于操作系统未安装apr或者apr路径未指到Tomcat默认可识别的路径,则apr模式无法启动,自动切换启动nio模式。
cd /usr
mkdir java
cd java/
mkdir packages
cd packages/
mkdir lib
cd lib/
mkdir amd64
cd amd64/
把/usr/local/apr/lib/ libtcnative-1.so.0.1.32软链接到上面创建的目录。
ln -s /usr/local/apr/lib/libtcnative-1.so.0.1.32 libtcnative-1.so
ln -s /usr/local/apr/lib/libtcnative-1.so.0.1.32 libtcnative-1.so.0
重新启动Tomcat看到启动日志最后三行
ajp-apr-8109