使用Tomcat Native提升Tomcat IO效率的方法詳解
簡(jiǎn)介
IO有很多種,從最開始的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 版本開始,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有許多用途,包括訪問高級(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
說(shuō)明APR安裝完畢并且已經(jīng)在被使用了。
到此這篇關(guān)于使用Tomcat Native提升Tomcat IO效率的方法詳解的文章就介紹到這了,更多相關(guān)Tomcat Native提升Tomcat IO效率內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tomcat何時(shí)寫回響應(yīng)數(shù)據(jù)報(bào)的詳析
這篇文章主要給大家介紹了關(guān)于tomcat是何時(shí)寫回響應(yīng)數(shù)據(jù)報(bào)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用tomcat具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04eclipse配置Tomcat和Tomcat出現(xiàn)無(wú)效端口解決辦法
本文主要介紹了eclipse配置Tomcat和Tomcat出現(xiàn)無(wú)效端口解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12redission-tomcat快速實(shí)現(xiàn)從單機(jī)部署到多機(jī)部署詳解
這篇文章主要介紹了redission-tomcat快速實(shí)現(xiàn)從單機(jī)部署到多機(jī)部署詳解,本文介紹一個(gè)基于redis的tomcat session管理開源項(xiàng)目:redission-tomcat,可無(wú)代碼侵入式地快速實(shí)現(xiàn)session共享,需要的朋友可以參考下2019-06-06Tomcat 發(fā)布程序使用cmd查看端口占用、相應(yīng)進(jìn)程、殺死進(jìn)程等的命令
這篇文章主要介紹了Tomcat 發(fā)布程序使用cmd查看端口占用、相應(yīng)進(jìn)程、殺死進(jìn)程等的命令的相關(guān)資料,需要的朋友可以參考下2016-12-12詳解Tomcat多域名配置(多個(gè)項(xiàng)目共用80端口)
本篇文章主要介紹了Tomcat多域名配置(多個(gè)項(xiàng)目共用80端口),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06tomcat啟動(dòng)startup.bat一閃而過(guò)問題的解決方法【親測(cè)有效】
這篇文章主要介紹了tomcat啟動(dòng)startup.bat一閃而過(guò)問題的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05搭建Tomcat 8源碼開發(fā)環(huán)境的步驟詳解
相信大家都知道開源軟件tomcat目前幾乎已經(jīng)是Java web開發(fā)的必備軟件了,目前有很多關(guān)于tomcat的書籍,已經(jīng)通過(guò)配置對(duì)tomcat進(jìn)行一些跟應(yīng)用業(yè)務(wù)功能的調(diào)優(yōu),但感覺如果僅僅只是了解一些配置,可能稍微少了點(diǎn)什么,下面通過(guò)本文深入到源代碼中進(jìn)行學(xué)些和了解。2016-10-10