ubuntu中的tomcat使用apr模式

随声附和 提交于 2019-12-09 16:33:05

据说apr能提高50%性能,介绍是这样的:

Tomcat支持三种接收请求的处理方式:BIO、NIO、APR 。

1. BIO由于每个请求都要创建一个线程来处理,线程开销比较大,不能再高并发的场景,性能也是最低的。
2. NIO是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,比传统的bio更好的并发性能。
3. APR(Apache Portable Run-time libraries)简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务
网上找的资料是基于centos的,使用的yum安装,但这里是ubuntu,得使用apt-get,

但是yum和apt源的包名不一样,我第一次有些依赖没装上,在安装apr-util时报错:xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory,是因为有个expat的依赖没安装上,这里记录下。

所需软件

环境 ubuntu14\centos7
所需软件
tomcat7
* apr-1.6.3
* openssl-1.1.0h  很多资料没有这一步,但是最后tomcat-native安装失败,可能是由于tomcat8、9对ssl版本要求高一点,系统里默认安装的1.0.1,我们安装1.1.0h的版本
* apr-iconv-1.2.2
* apr-util-1.6.1
* tomcat-native(tomcat自带)
 
PS:文章之前写的安装openssl1.1.1,但是有网友说tomcat-native还是安装失败,所以这里改用1.1.0h,果然成功了,linux就这点不安逸,各种版本组合==
 
文末会列出几种常见的错误
安装软件
这是centos的依赖安装:yum install -y apr-devel openssl-devel gcc make expat-devel libtool

这是ubuntu的依赖安装:apt-get install libapr1-dev libssl-dev gcc make libexpat1-dev libtool

cd /usr/local/src
wget  https://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz
tar xf apr-1.6.3.tar.gz
cd apr-1.6.3/
./configure --prefix=/usr/local/apr
make && make install
    
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
ar -xzxf openssl-1.1.0h.tar.gz
cd openssl-1.1.0h/
./config --prefix=/usr/local/openssl -fPIC
// 注意这里需要加入 -fPIC参数,否则后面在安装tomcat native 组件会出错
// 注意:不要按照提示去运行 make depend
make && make install
#openssl安装完成继续更新系统环境
#修改历史的OpenSSL文件设置备份
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
#设置软连接使其使用新的OpenSSL版本 刚刚安装的OpenSSL默认安装在/usr/local/ssl
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 版本信息 openssl version,如为1.0.2则成功升级openssl
 
cd /usr/local/src
wget https://mirrors.cnnic.cn/apache/apr/apr-iconv-1.2.2.tar.gz
tar xf apr-iconv-1.2.2.tar.gz
cd apr-iconv-1.2.2/
./configure   --with-apr=/usr/local/apr  --prefix=/usr/local/apr-iconv
make && make install
 
cd /usr/local/src
wget  https://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz
tar xf apr-util-1.6.1.tar.gz  
cd apr-util-1.6.1/
./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr   --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make && make install
 
cd /usr/local/tomcat/bin/
tar xf tomcat-native.tar.gz
cd  /usr/local/tomcat/bin/tomcat-native-1.2.16-src/native
./configure --with-apr=/usr/local/apr  --with-java-home=/usr/local/jdk8.0     
make && make install
 
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /etc/profile
 
source /etc/profile
修改配置
vim /usr/local/tomcat/conf/server.xml
 
<Connector      port="80"        protocol="org.apache.coyote.http11.Http11AprProtocol"
                maxThreads="1000"
                minSpareThreads="100"
                acceptCount="900"
                disableUploadTimeout="true"
                connectionTimeout="20000"
                URIEncoding="UTF-8"
                enableLookups="false"
                redirectPort="8443"
                compression="on"
                compressionMinSize="1024"
               />
 
<!-- Define an AJP 1.3 Connector on port 8009 -->  ##注释掉下面那行,如果不用apache
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  -->    
测试
/usr/local/tomcat/bin/catalina.sh run
 
24-Jan-2018 21:39:17.695 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8
问题总结
1. java.lang.UnsatisfiedLinkError: /usr/local/apr/lib/libtcnative-1.so.0.2.7: /usr/local/apr/lib/libtcnative-1.so.0.2.7: undefined symbol: BN_get_rfc3526_prime_8192

这个是openssl版本和tomcat对不上导致的,具体版本间对应关系得查找官网资料,我也是瞎摸的,一般编译tomcat-native时候会有检查,都通过了就是兼容的。

2. requires the APR/native library which is not available

这个是tomcat配置了apr模式运行,但是以来模块没到位。

3. make tomcat-native 'ERR_remove_thread_state' is deprecated

这个是我用tomcat8.0.36和openssl1.1.0e时候的错,死活tomcat-native编译都通不过,最后换成tomcat8.5.15就没问题了。估计是有一个版本低了。

4. checking for JDK os include directory... Cannot find jni_md.h in /usr/lib/jvm/jre-1.8.0-openjdk.x86_64//configure: error: You should retry --with-os-type=SUBDIR
     在/tomcat-native-1.2.12-src/native/下./configure时,出现上面的问题,可能是因为安装的是jre不是jdk,他需要jni_md.h这个文件,在/usr/lib/jvm/java/include/linux/下面有,cp /usr/lib/jvm/java/include /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/重新执行configure即可。

 总的来说,就是版本依赖问题,得找到一个合适的版本组合~~

如果要继续在Apr模式的基础上继续配置Https,请参照文章https://blog.csdn.net/wokuailewozihao/article/details/81666215
--------------------- 
作者:欧阳陈曦 
来源:CSDN 
原文:https://blog.csdn.net/wokuailewozihao/article/details/81478239 
版权声明:本文为博主原创文章,转载请附上博文链接!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!