tomcat开启apr运行模式
tomcat支持三种模式:BIO、NIO、APR。默认的BIO性能最差;NIO模式是内置的,使用的是java的异步io,性能强于bio,并且简单改一下配置即可使用;APR模式是使用JNI(Java Native Interface)提升静态文件和SSL的效率,是三种模式中性能最强的,也是配置相对"复杂"的。
下面梳理了开启apr模式的方法
1、安装apr
cd /usr/local/src/
wget https://www-us.apache.org/dist//apr/apr-1.6.2.tar.gz
tar zxvf apr-1.6.2.tar.gz
cd apr-1.6.2
./configure
make && make install
2、安装apr-util
cd /usr/local/src/
wget https://www-us.apache.org/dist//apr/apr-util-1.6.0.tar.gz
tar zxvf apr-util-1.6.0.tar.gz
cd apr-util-1.6.0
./configure --with-apr=/usr/local/apr
make && make install
3、安装openssl-1.0.2(yum安装版本低,不能满足)
cd /usr/local/src/
wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
tar -zxf openssl-1.0.2-latest.tar.gz
cd openssl-1.0.2l
./config --prefix=/usr/local/openssl -fPIC
make
make install
4、安装native
cd /usr/local/src/
wget https://www-us.apache.org/dist/tomcat/tomcat-connectors/native/1.2.14/source/tomcat-native-1.2.14-src.tar.gz
tar zxvf tomcat-native-1.2.14-src.tar.gz
cd tomcat-native-1.2.14-src/native/
./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk8/ --with-ssl=/usr/local/openssl
make
make install
5、设置APR的环境变量
vi /etc/profile
后面添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
使设置生效
source /etc/profile
注:其实推荐的做法是编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
6、修改server.xml文件
Apr模式:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
Nio模式:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
7、FAQ
在安装apr-util遇到如下错误:
xml/apr_xml.c:35:19: 错误:expat.h:没有那个文件或目录
xml/apr_xml.c:66: 错误:expected specifier-qualifier-list before ‘XML_Parser’
xml/apr_xml.c: 在函数‘cleanup_parser’中:
xml/apr_xml.c:364: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:365: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c: 在文件层:
xml/apr_xml.c:384: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
xml/apr_xml.c: 在函数‘apr_xml_parser_create’中:
xml/apr_xml.c:401: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:402: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:410: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:411: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:412: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:424: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:424: 错误:‘default_handler’未声明(在此函数内第一次使用)
xml/apr_xml.c:424: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
xml/apr_xml.c:424: 错误:所在的函数内也只报告一次。)
xml/apr_xml.c: 在函数‘do_parse’中:
xml/apr_xml.c:434: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:438: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c:442: 错误:‘apr_xml_parser’没有名为‘xp_err’的成员
xml/apr_xml.c:442: 错误:‘apr_xml_parser’没有名为‘xp’的成员
xml/apr_xml.c: 在函数‘apr_xml_parser_geterror’中:
xml/apr_xml.c:500: 错误:‘apr_xml_parser’没有名为‘xp_err’的成员
xml/apr_xml.c:500: 错误:‘apr_xml_parser’没有名为‘xp_err’的成员
make[1]: *** [xml/apr_xml.lo] 错误 1
make[1]: Leaving directory `/usr/local/src/apr-util-1.6.0'
make: *** [all-recursive] 错误 1
解决办法: yum install expat-devel
评论