一岔擂、一些限制
- Windows 每個進(jìn)程中的線程數(shù)不允許超過 2000
- Linux 每個進(jìn)程中的線程數(shù)不允許超過 1000
- 在 Java 中每開啟一個線程需要耗用 1MB 的 JVM 內(nèi)存空間用于作為線程棧之用矢空。 (并發(fā)量上來后 可能需要修改JVM參數(shù)調(diào)優(yōu))
- 建議當(dāng)某個應(yīng)用擁有 250 個以上并發(fā)的時候,應(yīng)考慮應(yīng)用服務(wù)器的集群。
- 還需要考慮數(shù)據(jù)庫讀寫的并發(fā)能力
二骄酗、Tomcat
Tomcat 默認(rèn)配置的最大請求數(shù)是 150嘱兼,也就是說同時支持 150 個并發(fā)智润,當(dāng)然了及舍, Tomcat的最大并發(fā)數(shù)是可以配置的,實際運用中窟绷,最大并發(fā)數(shù)與硬件性能和CPU數(shù)量都有很大關(guān)系的锯玛。更好的硬件,更多的處理器都會使Tomcat支持更多的并發(fā)钾麸。
Tomcat 默認(rèn)的 HTTP 實現(xiàn)是采用阻塞式的 Socket 通信,每個請求都需要創(chuàng)建一個線程處理炕桨。這種模式下的并發(fā)量受到線程數(shù)的限制饭尝,但對于 Tomcat 來說幾乎沒有 BUG 存在了。
Tomcat 還可以配置 NIO 方式的 Socket 通信献宫,在性能上高于阻塞式的钥平,每個請求也不需要創(chuàng)建一個線程進(jìn)行處理,并發(fā)能力比前者高姊途。但沒有阻塞式的成熟涉瘾。
這個并發(fā)能力還與應(yīng)用的邏輯密切相關(guān),如果邏輯很復(fù)雜需要大量的計算捷兰,那并發(fā)能力勢必會下降立叛。如果每個請求都含有很多的數(shù)據(jù)庫操作,那么對于數(shù)據(jù)庫的性能要求也是非常高的贡茅。 對于單臺數(shù)據(jù)庫服務(wù)器來說秘蛇,允許客戶端的連接數(shù)量是有限制的。
三顶考、一些參數(shù)
maxThreads="1000" 最大并發(fā)數(shù)
minSpareThreads="100"http:///初始化時創(chuàng)建的線程數(shù)
maxSpareThreads="500"http:///一旦創(chuàng)建的線程超過這個值赁还,Tomcat就會關(guān)閉不再需要的socket線程。
acceptCount="700"http:// 指定當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時驹沿,可以放到處理隊列中的請求數(shù)艘策,超過這個數(shù)的請求將不予處理