1. tomcat连接器
Tomcat Connector(Tomcat连接器)有三种运行模式:bio、nio、apr
BIO
Bio(Blocking I/O),顾名思义,即阻塞I/O操作,说明Tomcat使用的是传统的Java I/O操作(即Java.IO包和子包)。Tomcat默认以BIO模式运行。不幸的是,一般来说,BIO模式是三种工作模式中的性能最差的。我们可以通过Tomcat Manager查看服务器当前的状态。
NIO
是 Java SE 1.4 及后续版本(即 java.nio 包和子包)提供的新 I/O 操作。Java NIO 是一种基于缓冲区的 Java API,可以提供非阻塞 I/O 操作,因此 NIO 也被视为非阻塞 I/O 的缩写。与传统的I/O操作(BIO)相比,它具有更好的并发操作性能。
APR
(Apache Portable Runtime / Apache),是 Apache HTTP 服务器的支持库。可以简单理解为Tomcat会在JNI中调用Apache HTTP服务器的核心动态链接库来处理文件读取或者网络传输操作,这样就大大提高了Tomcat对静态文件的处理性能。Tomcat APR也是在Tomcat上运行高并发应用程序的首选模式。
2. 查看Tomcat Connector运行模式
方法一:在http://xxxx:8080/manager/status中查看服务器状态
方法二:根据Tomcat启动日志信息判断
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Aug 04, 2015 10:20:35 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Aug 04, 2015 10:27:58 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
Aug 04, 2015 10:33:45 PM org.apache.coyote.AbstractProtocol init
3. 安装Tomcat APR环境
源码编译安装APR
1. 安装环境
$ sudo apt install -y gcc make libtool libexpat1-dev
2. 安装Apache Portable Runtime (APR)
Official address:https://apr.apache.org/compiling_unix.html
Compilation and installation APR
wget http://mirrors.shu.edu.cn/apache//apr/apr-1.6.5.tar.gz
tar zxf apr-1.6.5.tar.gzcd apr-1.6.5/
./configure --prefix=/usr/local/apache-apr
make
sudo make install
Compilation APR-ICONV
wget http://mirrors.shu.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz
tar zxf apr-iconv-1.2.2.tar.gzcd apr-iconv-1.2.2/
./configure --prefix=/usr/local/apache-apr-iconv --with-apr=/usr/local/apache-apr
make
sudo make install
Compilation APR-UTIL
wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
ubuntu@xxxxx:~/apr-util-1.6.1$ ./configure --prefix=/usr/local/apache-apr-util --with-apr=/usr/local/apache-apr --with-apr-iconv=/usr/local/apache-apr-iconv/bin/apriconv
tar zxf apr-util-1.6.1.tar.gzcd apr-util-1.6.1/
make
sudo make install
3. 编译安装 OpenSSL
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
$ sudo mkdir /usr/local/openssl
$ tar zxf openssl-1.1.1a.tar.gz
$ ./config --prefix=/usr/local/opensslcd openssl-1.1.1a
$ make
$ sudo make install
4. 编译安装tomcat Native
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.19/source/tomcat-native-1.2.19-src.tar.gz
tar zxf tomcat-native-1.2.19-src.tar.gz
$ cd tomcat-native-1.2.19-src/native/
$ ./configure --prefix=/usr/local/native --with-ssl=/usr/local/openssl --with-apr=/usr/local/apache-apr/bin/apr-1-config
$ make
$ sudo make install
4. 配置APR连接器
root@xxxxx:/var/www/demo# cat bin/setenv.sh export JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
...
<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
5. 三种模式的性能比较
来自netizens