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