【雜談】Spring Boot 預設支援的併發量

貓毛·波拿巴發表於2018-12-30

Spring Boot應用支援的最大併發量是多少?

Spring Boot 能支援的最大併發量主要看其對Tomcat的設定,可以在配置檔案中對其進行更改。當在配置檔案中敲出max後提示值就是它的預設值。

我們可以看到預設設定中,Tomcat的最大執行緒數是200,最大連線數是10000。

併發量指的是連線數,還是執行緒數?

當然是連線數。

200個執行緒如何處理10000條連線?

 Tomcat有兩種處理連線的模式,一種是BIO,一個執行緒只處理一個連線,另一種就是NIO,一個執行緒處理多個連線。由於HTTP請求不會太耗時,而且多個連線一般不會同時來訊息,所以一個執行緒處理多個連線沒有太大問題。

為什麼不開幾個執行緒?

多開執行緒的代價就是,增加上下午切換的時間,浪費CPU時間,另外還有就是執行緒數增多,每個執行緒分配到的時間片就變少。多開執行緒≠提高處理效率。

那增大最大連線數呢?

增大最大連線數,支援的併發量確實可以上去。但是在沒有改變硬體條件的情況下,這種併發量的提升必定以犧牲響應時間為代價。

對了,配置檔案明明就是空的,這些提示內容是哪裡載入的?

預設生成的配置檔案確實是空的,就是普通的文字檔案,不要錯以為這些內容是被隱藏掉的。首先是IDE要支援,IDE支援Spring Boot專案就知道該從哪裡載入資料。Spring Boot的預設配置資訊,都在 spring-boot-autoconfigure-版本號.jar 這個包中。其中上述Tomcat的配置在/web/ServerProperties.java中。下圖是用jd-gui反編譯看的,你也可以在spring boot專案中找到依賴包檢視。

相關文章