SpringBoot內建Tomcat,在預設設定中,Tomcat的最大執行緒數是200,最大連線數是10000。預設情況下,支援最大並發量為一萬,也就是指支援的連線數
1,是BIO,一個執行緒只處理一個Socket連接,
2,是NIO,一個執行緒處理多個Socket連接。
處理多個連線的單一執行緒通常不會造成太大問題,原因在於HTTP請求不是太耗時,而且多個連線通常不會同時發送訊息。一個執行緒處理多個連線數會很慢有可能會逾時
#server.tomcat.accept-count
:等待佇列長度,當可分配的執行緒數全部用完之後,後續的請求將進入等待佇列等待,等待佇列滿後則拒絕處理,預設為100。
server.tomcat.max-connections
:最大可被連線數,預設10000
#server .tomcat.max-threads
:最大工作執行緒數,預設200,
#server.tomcat.min-spare-threads
:最小工作執行緒數,初始化分配執行緒數,預設10
預設配置下,連線超過10000後會出現拒絕連線情況
預設配置下,觸發的請求超過200 100後拒絕處理(最大工作執行緒數等待佇列長度)
如果預設設定無法滿足目前需求可以自己調優可以手動修改設定來進行處理並發
##修改pro檔案
server.port=7001 server.tomcat.accept-count=1000 server.tomcat.max-connections=10000 server.tomcat.max-threads=500 server.tomcat.min-spare-threads=100
ps -ef | grep java //查看專案啟動的連接埠
pstree -p 7968 | wc -l //查看進程數
我們也可以使用設定檔, 可以新增WebServerConfiguration.java檔案
import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.stereotype.Component; //当Spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会吧此bean加载进spring容器中 @Component public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> { @Override public void customize(ConfigurableWebServerFactory configurableWebServerFactory) { //使用对应工厂类提供给我们的接口定制化我们的tomcat connector ((TomcatServletWebServerFactory)configurableWebServerFactory).addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); //定制化keepalivetimeout,设置30秒内没有请求则服务端自动断开keepalive链接 protocol.setKeepAliveTimeout(30000); //当客户端发送超过10000个请求则自动断开keepalive链接 protocol.setMaxKeepAliveRequests(10000); } }); } }
備註:
MySQL 資料庫QPS 容量問題:
2、壓力過大的問題,可以做負載平衡,一個TOMCAT無論如何也不可能擔當如此多的執行緒負載,而且JVM過大,其記憶體管理成本將顯著加大。更合理和科學的做法是使用2GB的內存,配置3到4個TOMCAT實例,每個實例的內存為512MB。
3、資料庫連線池,不少人,都推薦使用C3P0,能提高存取資料庫的並發效能好幾倍。
4、採用Tomcat叢集可以最大程度的發揮伺服器的效能,可以在配置較高的伺服器上部署多個Tomcat,也可以在多台伺服器上分別部署Tomcat,Apache和Tomcat整合的方式還是JK方式。經過驗證,系統對大用戶量使用的回應方面,Apache 3Tomccat集群> Apache 2Tomcat集群 > Apache整合Tomcat > 單一Tomcat。並且採用Apache 多Tomcat集群的部署方式時,如果一個Tomcat出現宕機,系統可以繼續使用,所以在硬體系統性能足夠優越的情況下,需要盡量發揮軟體的性能,可以採用增加Tomcat集群的方式。
1. 設定MPM(Multi Processing Modules多進程模組)。 ThreadPerChild,這個參數用來設定每個行程的執行緒數,在Windows環境下預設值是64,最大值是1920,建議設定為100-500之間,伺服器效能高的話值大一些,反之小。最大請求次數每個子程序能夠處理是由MaxRequestPerChild參數決定的。這個參數的值更大程度上取決於伺服器的內存,如果內存比較大的話可以設定為很大的參數,否則設定一個較小的值,建議值是3000.
2. 關閉DNS和名字解析HostnameLookups off
3. 開啟UseCanonicalName模組UseCanonicalName on
4. 關閉多餘模組一般來說,不需要載入的模組有,mod_include.so、mod_autoindex.so、mod_access. so、mod_auth.so.
5. 開啟KeepAlive支援
KeepAlive on, KeepAliveTimeout 15 MaxKeepAliveRequests 1000
#根據實際經驗,透過Apache和Tomcat叢集的方式提高系統效能的效果十分明顯,這種方式可以最大化的利用硬體資源,透過多個Tomcat的處理來分擔單Tomcat時的壓力。
web server允許的最大連線數也受制於作業系統的核心參數設置,通常Windows是2000個左右,Linux是1000個左右。
以上是springboot內建tomcat支援最大的並發量問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!