zhmg23

我们是如此的不同

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


评论