bingoogolapple.github.io
bingoogolapple.github.io copied to clipboard
Tomcat 请求处理方式
BIO 模式
- 阻塞式 I/O 操作,表示 Tomcat 使用的是传统 Java I/O 操作(即 java.io 包及其子包)。Tomcat7 以下版本默认情况下是以 bio 模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低
NIO 模式
- 是 Java SE 1.4 及后续版本提供的一种新的 I/O 操作方式(即 java.nio 包及其子包)。是一个基于缓冲区、并能提供非阻塞 I/O 操作的 Java API,它拥有比传统 I/O 操作(bio)更好的并发运行性能
- 要让 Tomcat 以 NIO 模式来运行,只需要在 Tomcat 安装目录 /conf/server.xml 文件中配置 Connector 的 protocol 为 org.apache.coyote.http11.Http11NioProtocol
- Tomcat8 以上版本,默认使用的就是 NIO 模式,不需要额外修改
apr 模式
- apr(Apache Portable Runtime/Apache 可移植运行时),是 Apache HTTP 服务器的支持库。可以简单地理解为,Tomcat 将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat 对静态文件的处理性能。apr 也是在 Tomcat 上运行高并发应用的首选模式
开启 apr 模式
- 安装 apr 我这里用的是 apr-1.5.2.tar.gz
tar -zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
- 安装 apr-util 我这里用的是 apr-util-1.5.4.tar.gz
tar -zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --with-apr=/usr/local/apr
make && make install
- 安装 openssl 我这里用的是 openssl-1.0.2l.tar.gz
tar -zxvf openssl-1.0.2l.tar.gz
cd openssl-1.0.2l
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl -fPIC
make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo “/usr/local/openssl/lib” >> /etc/ld.so.conf
ldconfig -v
openssl version -a
- 安装 tomcat-native,在 Tomcat 的 bin 目录下
cp /opt/apache-tomcat-8.5.14/bin/tomcat-native.tar.gz /usr/local/src
cd /usr/local/src
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.2.12-src/native
./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/openssl --with-java-home=/opt/jdk
make && make install
- catalina.sh 里增加 JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
- server.xml 文件中配置 Connector 的 protocol 为 org.apache.coyote.http11.Http11AprProtocol
- 如果不使用 AJP 的话注释掉「protocol="AJP/1.3"」对应的 Connector
- 如果不想启用 SSL,将 server.xml 中 apr 模式下 SSL 关闭,「SSLEngine="on"」改为「SSLEngine="off"」