Tomcat配置APR运行模式

Tomcat三种运行模式

BIO(blocking I/O)

阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包),对于每一个请求都要创建一个线程来进行处理,所以开销较大不适合处理高并发的场景。

NIO(New IO)

基于java中非阻塞IO操作的API实现(即java.nio包及其子包),比传统的i/o处理方式有更高的并发运行性能。

APR(Apache Portable Runtime/Apache可移植运行库)

Apache Portable Runtime是Apache HTTP服务器的支持库。可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。

安装APR

安装gcc

查看gcc是否安装,gcc –version,没有安装的话进行安装

下载tomcat、apr、apr-util、openssl

1
2
3
4
5
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.72/bin/apache-tomcat-7.0.72.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.5.2.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.5.4.tar.gz

wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz

编译apr

1
2
3
4
sudo mkdir /usr/local/apr
sudo chown hadoop:hadoop /usr/local/apr
cd apr-1.5.2
./configure && make && make install

编译apr-util

1
2
cd apr-util-1.5.4
./configure --with-apr=/usr/local/apr/ && make && make install

编译openssl

1
2
3
sudo mkdir /usr/local/ssl
sudo chown hadoop:hadoop /usr/local/ssl
./config -fPIC no-gost no-shared no-zlib && make && make install

编译tomcat-native

1
2
3
4
cd apache-tomcat-7.0.70/bin/
tar xzvf tomcat-native.tar.gz
cd tomcat-native-1.2.7-src/native/
./configure CFLAGS=-fPIC --with-apr=/usr/local/apr/ --with-java-home=/usr/java/jdk1.8.0_131 --with-ssl=/usr/local/ssl && make install

配置Tomcat使用APR运行模式

修改apache-tomcat-7.0.70/bin/catalina.sh文件

添加CATALINA_OPTS=”$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib”

修改apache-tomcat-7.0.70/conf/server.xml 文件

将protocol由HTTP/1.1 改成 org.apache.coyote.http11.Http11AprProtocol

1
2
3
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />

修改内存(apache-tomcat-7.0.70/bin/catalina.sh)

1
JAVA_OPTS="-server -Xmx8g -Xms8g -Xss256k -XX:+DisableExplicitGC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=50 -XX:G1ReservePercent=15"

压测

使用apache ab压测

1
ab -kc 1000 -n 10000 http://localhost/