讓你搞清楚疑問:大家服務最大的併發量是多少?

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
相關文章
相關標籤/搜索