一、一些限制
- Windows 每個進程中的線程數不允許超過 2000
- Linux 每個進程中的線程數不允許超過 1000
- 在 Java 中每開啟一個線程需要耗用 1MB 的 JVM 內存空間用於作為線程棧之用。 (並發量上來后 可能需要修改JVM參數調優)
- 建議當某個應用擁有 250 個以上並發的時候,應考慮應用服務器的集群。
- 還需要考慮數據庫讀寫的並發能力
二、Tomcat
Tomcat 默認配置的最大請求數是 150,也就是說同時支持 150 個並發,當然了, Tomcat的最大並發數是可以配置的,實際運用中,最大並發數與硬件性能和CPU數量都有很大關系的。更好的硬件,更多的處理器都會使Tomcat支持更多的並發。
Tomcat 默認的 HTTP 實現是采用阻塞式的 Socket 通信,每個請求都需要創建一個線程處理。這種模式下的並發量受到線程數的限制,但對於 Tomcat 來說幾乎沒有 BUG 存在了。
Tomcat 還可以配置 NIO 方式的 Socket 通信,在性能上高於阻塞式的,每個請求也不需要創建一個線程進行處理,並發能力比前者高。但沒有阻塞式的成熟。
這個並發能力還與應用的邏輯密切相關,如果邏輯很復雜需要大量的計算,那並發能力勢必會下降。如果每個請求都含有很多的數據庫操作,那么對於數據庫的性能要求也是非常高的。 對於單台數據庫服務器來說,允許客戶端的連接數量是有限制的。
三、一些參數
maxThreads="1000" 最大並發數 minSpareThreads="100"///初始化時創建的線程數 maxSpareThreads="500"///一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。 acceptCount="700"// 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
