一個tomcat究竟能接受多少並發


maxThreads

對tomcat來說,每一個進來的請求(request)都需要一個線程,直到該請求結束。如果同時進來的請求多於當前可用的請求處理線程數,額外的線程就會被創建,直到到達配置的最大線程數(maxThreads屬性值)。如果仍就同時接收到更多請求,這些來不及處理的請求就會在Connector創建的ServerSocket中堆積起來,直到到達最大的配置值(acceptCount屬性值)。至此,任何再來的請求將會收到connection refused錯誤,直到有可用的資源來處理它們。

具體配置相關信息參考:http://www.cnblogs.com/shenpengyan/articles/5938749.html中的Connector元素屬性配置。

一個簡單的類比(很貼切)

這里我們關心的是tomcat能同時處理的請求數和請求響應時間,顯然Connector元素的maxThreads和acceptCount屬性對其有直接的影響。無論acceptCount值為多少,maxThreads直接決定了實際可同時處理的請求數。而不管maxThreads如何,acceptCount則決定了有多少請求可等待處理。然而,不管是可立即處理請求還是需要放入等待區,都需要tomcat先接受該請求(即接受client的連接請求,建立socketchannel),那么tomcat同時可建立的連接數(maxConnections屬性值)也會影響可同時處理的請求數。
我們可把tomcat想象成一家醫院,你來到醫院大廳掛號看病,如果人家接受了,就相當於client和server建立socket連接了。接着你來到相應的科室,科室里每位醫生都有一間診室,這就相當於處理請求的線程;如果所有診室都有病人,科室的調度護士會讓你在科室小廳中耐心等待,直到他們通知你去幾號診室就診;如果有空閑醫生,你就可以立即就診。
有的病人到醫院很倉促,結果輪到他掛號或者就診了,他還在包里翻找病例本和醫保卡,如果超過了護士或醫生心里可承受的等待時間,他們就會讓病人到旁邊找去,先服務下位。這種情形跟Connector元素的connectionTimeout屬性所起的作用很相像。如果當前連接器(Connector)在接受連接后,等待了指定的時間但仍未接收到requestURI line,就會拋出超時異常。

connector幾種模式

tomcat的http connector有三種:bio、nio、apr。從上面的屬性描述中可以看出對於不同的connector實現,相同的屬性可能會有不同的默認值和不同的處理策略,所以在調整配置前,要先弄清楚各種實現之間的不同,以及當前部署容器使用的是哪種connector。

Tomcat7 http connector 配置文檔:http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

修改Tomcat Connector運行模式,優化Tomcat運行性能:http://www.365mini.com/page/tomcat-connector-mode.htm

Tomcat 6.x版本從6.0.32開始就默認支持apr。
Tomcat 7.x版本從7.0.30開始就默認支持apr。

web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。

加大tomcat可以使用的內存

tomcat默認可以使用的內存為128MB,在較大型的應用項目中,這點內存是不夠的,需要調大。
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下設置:

JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'

需要把這個兩個參數值調大。例如:

JAVA_OPTS='-Xms256m -Xmx512m'

表示初始化內存為256MB,可以使用的最大內存為512MB

其他考量

一台機器允許的連接數、線程數、內存大小,都會限制一台tomcat的實際並發數。

參考資料
1.修改Tomcat Connector運行模式,優化Tomcat運行性能
,http://www.365mini.com/page/tomcat-connector-mode.htm

2.對tomcat來說,每一個進來的請求(request)都需要一個線程,直到該請求結束,http://www.cnblogs.com/softidea/p/5750791.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM