tomcat併發配置

之前在做tomcat的最大併發量測試,現總結如下:

tomcat默認的連接是線程阻塞的,即protocol配置爲"HTTP/1.1"。那麼tomcat的最大連接數就受maxThreads和account的限制,

maxThreads是最大的線程數,account是線程等待數,當連接數量達到maxThreads時,就把多餘的連接放入account中。當連接數大於maxThreads+account時,連接被拒絕。maxThreads的默認值是200,account的默認值是100。

通過修改maxThreads和account的值可以增加tomcat的最大連接數。但是這個數值還受限於系統的最大句柄數。要是項目需要的併發量超過了系統的最大句柄數,那就只能修改系統的最大句柄數。Linux的默認最大句柄數是1024.

tomcat的線程連接還可以設置爲線程非阻塞,即 protocol="org.apache.coyote.http11.Http11NioProtocol"  

那麼tomcat的最大連接數就是系統的最大句柄數。當配置爲Nio時,不要加上maxThreads account等屬性,否則會報錯!



轉自:http://hi.baidu.com/latjo/blog/item/f939e925a76c88064d088d63.html

Tomcat從5.5版本開始,支持以下四種Connector的配置分別爲:

 

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

<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。

 

儘管這一個結果在實際的網站中因爲各方面因素導致,可能差別沒這麼大,例如受限於數據庫的性能等等的問題。但對我們在部署網站應用時還是具有參考價值的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章