天天看點

Tomcat 的三種(bio、nio、apr) 進階 Connector 運作模式

出處:http://www.iteye.com

tomcat的運作模式有3種.修改他們的運作模式.3種模式的運作是否成功,可以看他的啟動控制台,或者啟動日志.或者登入他們的預設頁面http://localhost:8080/檢視其中的伺服器狀态。

1)bio

預設的模式,性能非常低下,沒有經過任何優化處理和支援.

2)nio

利用java的異步io護理技術,no blocking IO技術.

想運作在該模式下,直接修改server.xml裡的Connector節點,修改protocol為

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" 
    connectionTimeout="20000" 
    URIEncoding="UTF-8" 
    useBodyEncodingForURI="true" 
    enableLookups="false" 
    redirectPort="8443" /> 
           

啟動後,就可以生效。

3)apr

安裝起來最困難,但是從作業系統級别來解決異步的IO問題,大幅度的提高性能.

必須要安裝apr和native,直接啟動就支援apr。下面的修改純屬多餘,僅供大家擴充知識,但仍然需要安裝apr和native

如nio修改模式,修改protocol為

org.apache.coyote.http11.Http11AprProtocol
           

Tomcat的四種基于HTTP協定的Connector性能比較

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443"/>
           
<Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
           
<Connector executor="tomcatThreadPool"
               port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />
           

我們姑且把上面四種Connector按照順序命名為 NIO, HTTP, POOL, NIOP

為了不讓其他因素影響測試結果,我們隻對一個很簡單的jsp頁面進行測試,這個頁面僅僅是輸出一個Hello World。假設位址是 http://tomcat1/test.jsp

我們依次對四種Connector進行測試,測試的用戶端在另外一台機器上用ab指令來完成,測試指令為: ab -c 900 -n 2000 http://tomcat1/test.jsp ,最終的測試結果如下表所示(機關:平均每秒處理的請求數):

NIO HTTP POOL NIOP
281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363
           

由這五組資料不難看出,HTTP的性能是很穩定,但是也是最差的,而這種方式就是Tomcat的預設配置。NIO方式波動很大,但沒有低于280 的,NIOP是在NIO的基礎上加入線程池,可能是程式處理更複雜了,是以性能不見得比NIO強;而POOL方式則波動很大,測試期間和HTTP方式一樣,不時有停滞。

由于linux的核心預設限制了最大打開檔案數目是1024,是以此次并發數控制在900。

盡管這一個結果在實際的網站中因為各方面因素導緻,可能差别沒這麼大,例如受限于資料庫的性能等等的問題。但對我們在部署網站應用時還是具有參考價值的。