當一個進程有 500 個線程在跑的話,那性能已是很低很低了。Tomcat 默認配置的最大請求數是 150,也就是說同時支持 150 個併發,固然了,也能夠將其改大。
當某個應用擁有 250 個以上併發的時候,應考慮應用服務器的集羣。
具體能承載多少併發,須要看硬件的配置,CPU 越多性能越高,分配給 JVM 的內存越多性能也就越高,但也會加劇 GC 的負擔。
操做系統對於進程中的線程數有必定的限制:
Windows 每一個進程中的線程數不容許超過 2000
Linux 每一個進程中的線程數不容許超過 1000
另外,在 Java 中每開啓一個線程須要耗用 1MB 的 JVM 內存空間用於做爲線程棧之用。
Tomcat的最大併發數是能夠配置的,實際運用中,最大併發數與硬件性能和CPU數量都有很大關係的。更好的硬件,更多的處理器都會使Tomcat支持更多的併發。
Tomcat 默認的 HTTP 實現是採用阻塞式的 Socket 通訊,每一個請求都須要建立一個線程處理。這種模式下的併發量受到線程數的限制,但對於 Tomcat 來講幾乎沒有 BUG 存在了。
Tomcat 還能夠配置 NIO 方式的 Socket 通訊,在性能上高於阻塞式的,每一個請求也不須要建立一個線程進行處理,併發能力比前者高。但沒有阻塞式的成熟。
這個併發能力還與應用的邏輯密切相關,若是邏輯很複雜須要大量的計算,那併發能力勢必會降低。若是每一個請求都含有不少的數據庫操做,那麼對於數據庫的性能也是很是高的。
對於單臺數據庫服務器來講,容許客戶端的鏈接數量是有限制的。
併發能力問題涉及整個系統架構和業務邏輯。
系統環境不一樣,Tomcat版本不一樣、JDK版本不一樣、以及修改的設定參數不一樣。併發量的差別仍是滿大的。
maxThreads="1000" 最大併發數
minSpareThreads="100"///初始化時建立的線程數
maxSpareThreads="500"///一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程。
acceptCount="700"// 指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理數據庫