首頁 > Java > java教程 > 主體

springboot內建tomcat支援最大的並發量問題怎麼解決

WBOY
發布: 2023-05-22 20:21:50
轉載
3789 人瀏覽過

    springboot內建的tomcat支援最大的並發量

    SpringBoot內建Tomcat,在預設設定中,Tomcat的最大執行緒數是200,最大連線數是10000。預設情況下,支援最大並發量為一萬,也就是指支援的連線數

    Tomcat有兩種處理連線的模式

    1,是BIO,一個執行緒只處理一個Socket連接,

    2,是NIO,一個執行緒處理多個Socket連接。

    處理多個連線的單一執行緒通常不會造成太大問題,原因在於HTTP請求不是太耗時,而且多個連線通常不會同時發送訊息。一個執行緒處理多個連線數會很慢有可能會逾時

    預設內嵌Tomcat配置

    • #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
    登入後複製

    然後打包重啟項目

    ##kill -9 9545   //殺死程序

    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 容量問題:

      主鍵查詢: 千萬等級資料== 1-10 ms
    • ##唯一索引查詢: 千萬等級資料== 10-100 ms
    • 非唯一索引查詢: 千萬等級資料== 100-1000ms
    • 無索引資料: 百萬層資料== 1000ms
    #MySQL 資料庫TPS 容量問題:

      #非插入的更新刪除操作: 同查詢
    • 插入操作: 1w~10w tps(依賴配置優化)
    • 提高tomcat並發量的幾種方法

    1、Apache  Tomcat 結合起來用Apache負責靜態頁面,Tomcat負責動態頁面,同時減少connectionTimeout的時間,以應對並發量大線程回收來不及的情況。

    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中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!