Spring Boot 能支持的最大併發量主要看其對Tomcat的設置。因爲如今都使用的是springboot服務,配置文件中也沒有配置Tomcat 相關參數,基本都是使用默認的Tomcat的線程配置。html
默認設置中,Tomcat的最大線程數200,最大鏈接數10000。java
併發量指的是鏈接數,仍是線程數?
鏈接數。web
200個線程如何處理10000條鏈接?
Tomcat有兩種處理鏈接的模式spring
BIO
一個線程只處理一個Socket鏈接數據庫
NIO
一個線程處理多個Socket鏈接。因爲HTTP請求不會太耗時,並且多個鏈接通常不會同時來消息,因此一個線程處理多個鏈接沒有太大問題。apache
爲何很少開幾個線程?
多開線程的代價就是,增長上下文切換的時間,浪費CPU時間,另外還有就是線程數增多,每一個線程分配到的時間片就變少。tomcat
多開線程<>提升處理效率。安全
爲什麼不增大最大鏈接數?
增大最大鏈接數,支持的併發量確實能夠上去。可是在沒有改變硬件條件的狀況下,這種併發量的提高一定以犧牲響應時間爲代價。springboot
配置文件爲空,這些默認配置哪來的?
Spring Boot的默認配置信息,都在 spring-boot-autoconfigure-版本號.jar 這個包中。服務器
Tomcat配置:org.springframework.boot.autoconfigure.web.ServerProperties.java
最佳線程數目 = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU數目。
最佳線程數目 = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU數目,
CPU密集型
操做內存處理的業務,通常線程數設置爲:CPU核數 + 1 或者 CPU核數*2。核數爲4的話,通常設置 5 或 8 。
IO密集型
文件操做,網絡操做,數據庫操做,通常線程設置爲:cpu核數 / (1-0.9),核數爲4的話,通常設置 40
maxThreads="8" //最大併發數 minSpareThreads="100"///初始化時建立的線程數 maxSpareThreads="500"///一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程。 acceptCount="700"// 指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理 maxThreads 客戶請求最大線程數 minSpareThreads Tomcat初始化時建立的 socket 線程數 maxSpareThreads Tomcat鏈接器的最大空閒 socket 線程數 enableLookups 若設爲true, 則支持域名解析,可把 ip 地址解析爲主機名 redirectPort 在須要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口 acceptAccount 監聽端口隊列最大數,滿了以後客戶請求會被拒絕(不能小於maxSpareThreads ) connectionTimeout 鏈接超時 minProcessors 服務器建立時的最小處理線程數 maxProcessors 服務器同時最大處理線程數 URIEncoding URL統一編碼 maxThreads:處理的最大併發請求數,默認值200 minSpareThreads:最小線程數始終保持運行,默認值10 maxConnections:在給定時間接受和處理的最大鏈接數,默認值10000
參考
- http://tomcat.apache.org/tomcat-8.0-doc/config/http.html#HTTP/1.1_and_HTTP/1.0_Support