JAVA運維-Tomcat支持APR模式

前言

之前在測試環境啟動Tomcat時,發現有如下的警告錯誤,大概意思是我的APR庫版本是1.1.24,但是Tomcat 8.5 需要的版本是1.2.6。需要一次升級,自己順便了解了一下APR。現時帶大家一同搭建,使Tomcat支持APR模式。

30-Sep-2017 11:20:30.659 SEVERE [main] org.apache.catalina.core.AprLifecycleListener.init An incompatible version 1.1.24 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.2.6
30-Sep-2017 11:20:31.601 SEVERE [main] org.apache.catalina.core.AprLifecycleListener.init An incompatible version 1.1.24 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.2.6
30-Sep-2017 11:20:31.603 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8888"]
30-Sep-2017 11:20:31.722 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
30-Sep-2017 11:20:31.726 SEVERE [main] org.apache.catalina.core.AprLifecycleListener.init An incompatible version 1.1.24 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.2.6
30-Sep-2017 11:20:31.727 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8011"]
1. 什么是APR

APR:Apache Portable Run-time libraries,Apache可移植運行庫。在早期的Apache版本中,應用程序本身必須能夠處理各種具體操作系統平臺的細節,并針對不同的平臺調用不同的處理函數。隨著Apache的進一步開發,Apache組織決定將這些通用的函數獨立出來并發展成為一個新的項目。這樣,APR的開發就從Apache中獨立出來,Apache僅僅是使用APR而已。

Tomcat Native:這個項目可以讓 Tomcat 使用 Apache 的 apr 包來處理包括文件和網絡IO操作,以提升性能。

2. Tomcat Connector支持的運行模式
  • BIO

一個線程處理一個請求。缺點:并發量高時,線程數較多,浪費資源。

Tomcat7或以下,在Linux系統中默認使用這種方式。

  • NIO

利用Java的異步IO處理,可以通過少量的線程處理大量的請求。

Tomcat8Linux系統中默認使用這種方式。

Tomcat7必須修改Connector配置來啟動:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 
         connectionTimeout="20000" redirectPort="8443"/> 
  • APR

即Apache Portable Runtime,從操作系統層面解決IO阻塞問題。Tomcat7Tomcat8Win7或以上的系統中啟動默認使用這種方式。Linux如果安裝了aprnativeTomcat直接啟動就支持apr

現時大部分人使用時,都是默認解壓Tomcat直接使用,所以大部分使用的是NIO模式,下面我就帶大家使自己的Tomcat支持APR模式。

搭建APR

1. 下載并解壓

下載相關的工具包aprapr-util

cd /usr/local/
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
tar -zxvf apr-1.6.3.tar.gz
cd /usr/local/
wget http://mirrors.shuosc.org/apache//apr/apr-util-1.6.1.tar.gz
tar -zxvf apr-util-1.6.1.tar.gz

如果沒有安裝gcc依賴包,則安裝對應依賴包

yum -y install autoconf
yum -y install libtool
yum -y install expat-devel
yum -y install openssl openssl-devel

我在使用yum安裝openssl的時候發現openssl是1.0.1,但tomcat-v8.5需要1.0.2或以上版本的。所以只能手動去編譯安裝。如果你們安裝到的版本是1.0.2或以上,則無需執行如下步驟

下載并解壓openssl

cd /usr/local/
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
tar -zxvf openssl-1.0.2l.tar.gz

安裝并配置

cd /usr/local/openssl-1.0.2l/
./config --prefix=/usr/local/openssl // 指定安裝到/usr/local/openssl目錄
make && make install
mv /usr/bin/openssl /usr/bin/openssl.OFF    
mv /usr/include/openssl /usr/include/openssl.OFF    
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 version -a  

2. 編譯并安裝

cd /usr/local/apr-1.6.3/
./configure --prefix=/usr/local/apr // 指定安裝到/usr/local/apr目錄
make && make install
cd /usr/local/apr-util-1.6.1/

//指定安裝到/usr/local/apr-util目錄
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

make && make install

3. 安裝tomcat-native

cd /usr/local/
wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.13/bin/apache-tomcat-8.5.13.tar.gz
tar -zxvf apache-tomcat-8.5.13.tar.gz
mv apache-tomcat-8.5.13 tomcat-v8.5

切換目錄,在tomcat/bin目錄下找到tomcat-native.tar.gz;

cd /usr/tomcat-v8.5/bin/

解壓tomcat-native.tar.gz

tar -zxvf tomcat-native.tar.gz

切換目錄

cd /usr/tomcat-v8.5/bin/tomcat-native-1.2.12-src/native/

tomcat安裝apr

./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.8.0_131 --with-ssl=/usr/bin --prefix=/usr/local/apr // 指定之前安裝的目錄
make && make install

配置APR本地庫到系統共享庫搜索路徑中

vi /etc/profile

在文檔最后添加

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib

使配置生效

source /etc/profile

4. 修改Tomcat配置文件

修改Tomcat目錄下的conf/server.xml文件,將相關Connector中的protocol修改為org.apache.coyote.http11.Http11AprProtocol

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
               connectionTimeout="20000"
               redirectPort="8444" />

5. 啟動測試

27-Aug-2018 10:02:58.733 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
27-Aug-2018 10:02:58.790 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8010"]
27-Aug-2018 10:02:58.856 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 4595 ms

由上圖Tomcat啟動完的日志信息最后可以看到ProtocolHandler ["http-apr-8080"],證明我們已經搭建成功。

總結

上述就是如何讓Tomcat支持APR模式的完整流程,大家可以參考一下,至于APR模式和NIO模式相比,性能提升有多明顯,我自己沒有親測。但是大家可以參考下面這篇文章看看。

參考文章:tomcat性能提升3倍不是夢

此文沒過多技術方面的東西,主要是樓主本人對平時一些工作中操作的一些總結,用于以后備忘復習使用,謝謝大家的支持,如果此文對你有所幫助,請點個贊,謝謝。

參考文章

tomcat官方文檔
tomcat性能提升3倍不是夢
開啟Tomcat APR運行模式,優化并發性能
Linux下為Tomcat安裝APR
Linux 安裝apr
CentOS之——升級openssl為最新版

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容