使用Tomcat Native提升Tomcat IO效率

簡介

IO有很多種细燎,從最開始的Block IO坎怪,到nonblocking IO仆邓,再到IO多路復用和異步IO,一步一步的將IO的性能提升做到極致淋袖。

今天我們要介紹一下怎么使用Tomcat Native來提升Tomcat IO的效率鸿市。

Tomcat的連接方式

Tomcat中使用連接器來處理與外部客戶端的通信。Connecter主要用來接受外部客戶端的請求即碗,并轉(zhuǎn)交給處理引擎處理焰情。

在Tomcat中有兩種Connector。一種是 HTTP connector剥懒, 一種是AJP connector内舟。

HTTP connector大家應(yīng)該很好理解,它也是tomcat默認使用的連接器初橘。

還有一個連接器叫做AJP验游,AJP主要是用來和web服務(wù)器進行通信用的充岛,因為AJP協(xié)議的速度要比HTTP的快,所以AJP除了用來和其他webserver進行通信之外批狱,還可以通過AJP來構(gòu)建tomcat集群裸准。

這兩種方式都支持4中協(xié)議展东,分別是BIO赔硫,NIO,NIO2和APR盐肃。

#以下四種Connector實現(xiàn)都是直接處理來自客戶端Http請求
org.apache.coyote.http11.Http11Protocol : 支持HTTP/1.1 協(xié)議的連接器爪膊。

org.apache.coyote.http11.Http11NioProtocol : 支持HTTP/1.1 協(xié)議+New IO的連接器。

org.apache.coyote.http11.Http11Nio2Protocol : 支持HTTP/1.1 協(xié)議+New IO2的連接器砸王。

org.apache.coyote.http11.Http11AprProtocol : 使用APR(Apache portable runtime)技術(shù)的連接器,利用Native


#以下四種實現(xiàn)方法則是與web server打交道
org.apache.coyote.ajp.AjpProtocol:使用AJP協(xié)議的連接器推盛,實現(xiàn)與web server(如Apache httpd)之間的通信

org.apache.coyote.ajp.AjpNioProtocol:SJP協(xié)議+ New IO

org.apache.coyote.ajp.AjpNio2Protocol:SJP協(xié)議+ New IO2

org.apache.coyote.ajp.AjpAprProtocol:AJP + APR

講下他們的區(qū)別,BIO就是block IO是最最基礎(chǔ)的IO方式谦铃, 我們通過這樣來配置:

<Connector  port=”8080”  
protocol=”HTTP/1.1”
  
maxThreads=”150”  
connectionTimeout=”20000”   
redirectPort=”8443” />

Tomcat7以下版本在默認情況下是以bio模式運行的耘成。自Tomcat 8.5 版本開始,Tomcat就移除了對BIO的支持驹闰。

New IO是基于java.nio包及其子包的一種IO方式瘪菌。能提供非阻塞IO方式,比傳統(tǒng)的BIO擁有與更加高效的運行效率嘹朗。

我們這樣配置New IO:

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

New IO和New IO2有什么區(qū)別呢师妙?

New IO2是tomcat8中引入的IO方式,我們可以這樣配置:

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

apr這種方式就高級了屹培,這個是我們今天要講解的tomcat native的主要作用默穴。

APR和Tomcat Native

apr的全稱是Apache Portable Runtime,它是一個高度可移植的庫褪秀,它是Apache HTTP Server 2.x的核心蓄诽。 APR有許多用途,包括訪問高級IO功能(例如sendfile媒吗,epoll和OpenSSL)若专,操作系統(tǒng)級別的功能(生成隨機數(shù),系統(tǒng)狀態(tài)等)和本機進程處理(共享內(nèi)存蝴猪,NT管道和Unix套接字)调衰。

Tomcat可以通過JNI的形式調(diào)用Apache HTTP服務(wù)器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡(luò)傳輸操作,從而大大地提高Tomcat對靜態(tài)文件的處理性能自阱。

通過使用APR我們可以獲得如下的特性:

  1. Non-blocking I/O和請求連接保持嚎莉。
  2. 支持OpenSSL和TLS/SSL。

Tomcat Native是一個庫沛豌,通過這個庫趋箩,Tomcat可以使用APR赃额。

所以使用Tomcat Native的前提是需要安裝好APR library,OpenSSL和JDK叫确。

我們可以通過下面的方式來安裝apr和openssl:

debian based linux系統(tǒng):

apt-get install libapr1.0-dev libssl-dev

rpm based Linux 系統(tǒng):

yum install apr-devel openssl-devel

在windows下面跳芳,tcnative是以一個dll的形式來提供的,我們直接下載使用就可以了竹勉。

但是在linux下面飞盆,因為平臺不同,所以在linux下面tcnative是需要自行編譯的次乓。

一般來說我們可以在 bin/tomcat-native.tar.gz 找到tcnative的源碼包吓歇。將其解壓。

先運行configure命令:

./configure --with-apr=/usr/bin/apr-1-config \
            --with-java-home=/home/jfclere/JAVA/jdk1.7.0_80/ \
            --with-ssl=yes \
            --prefix=$CATALINA_HOME

再進行make操作:

make && make install

生成的lib文件將會被放入$CATALINA_HOME/lib中票腰。

在tomcat中使用APR

安裝好tcnative之后城看,我們就可以在tomcat中使用APR了。

先檢查一下conf/server.xml中是否有下面的配置:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

然后我們需要修改 $CATALINA_HOME/bin/setenv.sh 將tc-native 的lib文件添加到LD_LIBRARY_PATH中杏慰。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH

最后添加APR的連接:

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

運行即可测柠。

從日志中,我們會發(fā)現(xiàn)下面的內(nèi)容:

org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080

說明APR安裝完畢并且已經(jīng)在被使用了缘滥。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/tomcat-native-startup/

本文來源:flydean的博客

歡迎關(guān)注我的公眾號:「程序那些事」最通俗的解讀轰胁,最深刻的干貨,最簡潔的教程完域,眾多你不知道的小技巧等你來發(fā)現(xiàn)软吐!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吟税,隨后出現(xiàn)的幾起案子凹耙,更是在濱河造成了極大的恐慌,老刑警劉巖肠仪,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肖抱,死亡現(xiàn)場離奇詭異,居然都是意外死亡异旧,警方通過查閱死者的電腦和手機意述,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吮蛹,“玉大人荤崇,你說我怎么就攤上這事〕闭耄” “怎么了术荤?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長每篷。 經(jīng)常有香客問我瓣戚,道長端圈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任子库,我火速辦了婚禮舱权,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仑嗅。我一直安慰自己宴倍,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布无畔。 她就那樣靜靜地躺著啊楚,像睡著了一般吠冤。 火紅的嫁衣襯著肌膚如雪浑彰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天拯辙,我揣著相機與錄音郭变,去河邊找鬼。 笑死涯保,一個胖子當著我的面吹牛诉濒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夕春,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼未荒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了及志?” 一聲冷哼從身側(cè)響起片排,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎速侈,沒想到半個月后率寡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡倚搬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年冶共,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片每界。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡捅僵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眨层,到底是詐尸還是另有隱情庙楚,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布谐岁,位于F島的核電站醋奠,受9級特大地震影響榛臼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窜司,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一沛善、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塞祈,春花似錦金刁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斯议,卻和暖如春产捞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哼御。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工坯临, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恋昼。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓看靠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親液肌。 傳聞我的和親對象是個殘疾皇子挟炬,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容