平常应用中,单台Tomcat能支持最大的并发数是多少?html
做为一个有经验的Java Web开发人员对这个问题应该有大概的印象,并会让问题再具体点,好比Tomcat版本,运行模式,并发请求容许的最大响应时间等,而后针对其中某个点搜索答案,而不该该低效的去直接搜这个答案。而且若是你没相关知识,很容易被网上的知识误导,由于不少都是很早以前配置的答案的转载。apache
以如今主要用的Tomcat8为例,想要彻底掌握配置,最好仍是去官网去浏览锁定本身想知道的相关问题的关键词。https://tomcat.apache.org/tomcat-8.5-doc/config/http.htmlsegmentfault
从上面配置也能够看出Tomcat8在操做系统没有装arp库支持时默认工做在NIO模式,默认支持的最大并发链接数是10000。tomcat
The maximum number of connections that the server will accept and process at any given time. When this number has been reached, the server will accept, but not process, one further connection. This additional connection be blocked until the number of connections being processed falls below maxConnections at which point the server will start accepting and processing new connections again. Note that once the limit has been reached, the operating system may still accept connections based on the
acceptCount
setting. The default value varies by connector type. For NIO and NIO2 the default is10000
. For APR/native, the default is8192
.并发Note that for APR/native on Windows, the configured value will be reduced to the highest multiple of 1024 that is less than or equal to maxConnections. This is done for performance reasons.
If set to a value of -1, the maxConnections feature is disabled and connections are not counted.less
Sets the protocol to handle incoming traffic. The default value is
HTTP/1.1
which uses an auto-switching mechanism to select either a Java NIO based connector or an APR/native based connector. If thePATH
(Windows) orLD_LIBRARY_PATH
(on most unix systems) environment variables contain the Tomcat native library, and theAprLifecycleListener
that is used to initialize APR has itsuseAprConnector
attribute set totrue
, the APR/native connector will be used. If the native library cannot be found or the attribute is not configured, the Java NIO based connector will be used. Note that the APR/native connector has different settings for HTTPS than the Java connectors.
To use an explicit protocol rather than rely on the auto-switching mechanism described above, the following values may be used:org.apache.coyote.http11.Http11NioProtocol
- non blocking Java NIO connectororg.apache.coyote.http11.Http11Nio2Protocol
- non blocking Java NIO2 connectororg.apache.coyote.http11.Http11AprProtocol
- the APR/native connector.
Custom implementations may also be used.
Take a look at our Connector Comparison chart. The configuration for both Java connectors is identical, for http and https.
For more information on the APR connector and APR specific SSL settings please visit the APR documentationsocket
注意这个值是Tomcat默认接受的并发链接数,是TCP链接层相关的参数。Tomcat在NIO模式时有一个线程专业接受请求链接,而后将其放到任务队列,而后有工做线程从任务t队列取出请求并并发处理(工做线程数经过maxThreads值控制,Tomcat默认是200),若是每一个请求处理很快好比20ms,则工做线程1s内就能处理10000个请求,不然若请求处理很慢好比要几秒,则请求队列中的链接获得处理收到响应的时间也会变慢。tcp
maxThreads、minSpareThreads是tomcat工做线程池的配置参数,maxThreads就至关于jdk线程池的maxPoolSize,而minSpareThreads就至关于jdk线程池的corePoolSize。ide
acceptCount、maxConnections是tcp层相关的参数。this
tomcat有一个acceptor线程来accept socket链接,而后有工做线程来进行业务处理。对于client端的一个请求进来,流程是这样的:tcp的三次握手创建链接,创建链接的过程当中,OS维护了半链接队列(syn队列)以及彻底链接队列(accept队列),在第三次握手以后,server收到了client的ack,则进入establish的状态,而后该链接由syn队列移动到accept队列。tomcat的acceptor线程则负责从accept队列中取出该connection,接受该connection,而后交给工做线程去处理(
读取请求参数、处理逻辑、返回响应等等;若是该链接不是keep alived的话,则关闭该链接,而后该工做线程释放回线程池,若是是keep alived的话,则等待下一个数据包的到来直到keepAliveTimeout,而后关闭该链接释放回线程池
),而后本身接着去accept队列取connection(当当前socket链接超过maxConnections的时候,acceptor线程本身会阻塞等待,等链接降下去以后,才去处理accept队列的下一个链接
)。acceptCount指的就是这个accept队列的大小。https://segmentfault.com/a/1190000008064162