如何使用Tomcat Native提升Tomcat IO效率

IO有很多種,從最開(kāi)始的Block IO钝凶,到nonblocking IO误墓,再到IO多路復(fù)用和異步IO,一步一步的將IO的性能提升做到極致穆咐。

今天我們要介紹一下怎么使用Tomcat Native來(lái)提升Tomcat IO的效率颤诀。

Tomcat的連接方式
Tomcat中使用連接器來(lái)處理與外部客戶端的通信。Connecter主要用來(lái)接受外部客戶端的請(qǐng)求对湃,并轉(zhuǎn)交給處理引擎處理崖叫。

在Tomcat中有兩種Connector。一種是 HTTP connector拍柒, 一種是AJP connector心傀。

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

還有一個(gè)連接器叫做AJP脂男,AJP主要是用來(lái)和web服務(wù)器進(jìn)行通信用的,因?yàn)锳JP協(xié)議的速度要比HTTP的快种呐,所以AJP除了用來(lái)和其他webserver進(jìn)行通信之外宰翅,還可以通過(guò)AJP來(lái)構(gòu)建tomcat集群。

這兩種方式都支持4中協(xié)議爽室,分別是BIO汁讼,NIO,NIO2和APR肮之。

#以下四種Connector實(shí)現(xiàn)都是直接處理來(lái)自客戶端Http請(qǐng)求
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


#以下四種實(shí)現(xiàn)方法則是與web server打交道
org.apache.coyote.ajp.AjpProtocol:使用AJP協(xié)議的連接器眶明,實(shí)現(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方式筐高, 我們通過(guò)這樣來(lái)配置:

<Connector  port=”8080”  
protocol=”HTTP/1.1”

maxThreads=”150”  
connectionTimeout=”20000”   
redirectPort=”8443” />

Tomcat7以下版本在默認(rèn)情況下是以bio模式運(yùn)行的搜囱。自Tomcat 8.5 版本開(kāi)始,Tomcat就移除了對(duì)BIO的支持柑土。

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

我們這樣配置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這種方式就高級(jí)了狐榔,這個(gè)是我們今天要講解的tomcat native的主要作用坛增。

APR和Tomcat Native
apr的全稱是Apache Portable Runtime获雕,它是一個(gè)高度可移植的庫(kù),它是Apache HTTP Server 2.x的核心收捣。 APR有許多用途届案,包括訪問(wèn)高級(jí)IO功能(例如sendfile,epoll和OpenSSL)罢艾,操作系統(tǒng)級(jí)別的功能(生成隨機(jī)數(shù)楣颠,系統(tǒng)狀態(tài)等)和本機(jī)進(jìn)程處理(共享內(nèi)存,NT管道和Unix套接字)咐蚯。

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

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

Non-blocking I/O和請(qǐng)求連接保持春锋。
支持OpenSSL和TLS/SSL睁冬。
Tomcat Native是一個(gè)庫(kù),通過(guò)這個(gè)庫(kù)看疙,Tomcat可以使用APR豆拨。

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

我們可以通過(guò)下面的方式來(lái)安裝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是以一個(gè)dll的形式來(lái)提供的,我們直接下載使用就可以了搁胆。

但是在linux下面弥搞,因?yàn)槠脚_(tái)不同,所以在linux下面tcnative是需要自行編譯的渠旁。

一般來(lái)說(shuō)我們可以在 bin/tomcat-native.tar.gz 找到tcnative的源碼包攀例。將其解壓。

先運(yùn)行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

再進(jìn)行make操作:

make && make install

生成的lib文件將會(huì)被放入$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" />

運(yùn)行即可梆惯。

從日志中,我們會(huì)發(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吗垮,一起剝皮案震驚了整個(gè)濱河市垛吗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烁登,老刑警劉巖怯屉,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锨络,警方通過(guò)查閱死者的電腦和手機(jī)蝗敢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)足删,“玉大人,你說(shuō)我怎么就攤上這事锁右∈埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵咏瑟,是天一觀的道長(zhǎng)拂到。 經(jīng)常有香客問(wèn)我,道長(zhǎng)码泞,這世上最難降的妖魔是什么兄旬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮余寥,結(jié)果婚禮上领铐,老公的妹妹穿的比我還像新娘。我一直安慰自己宋舷,他們只是感情好绪撵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著祝蝠,像睡著了一般音诈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绎狭,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天细溅,我揣著相機(jī)與錄音,去河邊找鬼儡嘶。 笑死喇聊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹦狂。 我是一名探鬼主播承疲,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸥咖!你這毒婦竟也來(lái)了燕鸽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啼辣,失蹤者是張志新(化名)和其女友劉穎啊研,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡党远,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年削解,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟娱。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氛驮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出济似,到底是詐尸還是另有隱情矫废,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布砰蠢,位于F島的核電站蓖扑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏台舱。R本人自食惡果不足惜律杠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竞惋。 院中可真熱鬧柜去,春花似錦、人聲如沸拆宛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胰挑。三九已至蔓罚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞻颂,已是汗流浹背豺谈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贡这,地道東北人茬末。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盖矫,于是被迫代替她去往敵國(guó)和親丽惭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360