ubuntu中的tomcat使用apr模式

聽說apr能提升50%性能,介紹是這樣的:java

Tomcat支持三種接收請求的處理方式:BIO、NIO、APR 。linux

1. BIO因爲每一個請求都要建立一個線程來處理,線程開銷比較大,不能再高併發的場景,性能也是最低的。
2. NIO是一個基於緩衝區、並能提供非阻塞I/O操做的Java API,比傳統的bio更好的併發性能。
3. APR(Apache Portable Run-time libraries)簡單理解,就是從操做系統級別解決異步IO問題,大幅度的提升服務
網上找的資料是基於centos的,使用的yum安裝,但這裏是ubuntu,得使用apt-get,apache

可是yum和apt源的包名不同,我第一次有些依賴沒裝上,在安裝apr-util時報錯:xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory,是由於有個expat的依賴沒安裝上,這裏記錄下。ubuntu

所需軟件vim

環境 ubuntu14\centos7
所需軟件
tomcat7
* apr-1.6.3
* openssl-1.1.0h  不少資料沒有這一步,可是最後tomcat-native安裝失敗,多是因爲tomcat八、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 libtoolcentos

這是ubuntu的依賴安裝:apt-get install libapr1-dev libssl-dev gcc make libexpat1-dev libtooltomcat

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 availablejvm

這個是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  版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索