以Tomcat8为例
配置方式一:
<Connector port="8080" acceptCount="100" maxConnections="200"
minSpareThreads="10" maxThreads="200"/>
-
acceptCount:请求等待队列大小。当Tomcat没有空间线程处理连接请求时,新来的连接请求放入等待队列,默认为100。当队列超过acceptCount后,新连接请求将被拒绝
-
maxConnections:Tomcat能处理的最大并发连接数。当超过后还是会接收并放入等待队列(acceptCount控制),连接会等待,不能被处理。BIO默认是maxThreads数量。NIO和NIO2默认是10000,ARP默认是8192
-
minSpareThreads:线程池最小线程数,默认是10.改配置指定线程池可以维持的空闲线程数量
-
maxThreads:线程池最大线程数,默认是200.当线程池空闲一段时间后会释放只保留minSpareThreads个线程
Tomcat最大并发线程数是由maxThreads和maxConnections中最小的一个决定。BIO场景下maxConnections和maxThreads是一样的,当需要长连接场景时,应使用NIO模式,并发连接数是大于线程数的。
配置方式二:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" deamon="true"
minSpareThreads="25" maxThreads="200" maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE" prestartminSpareThreads="false"/>
<Connector port="8080" executor="tomcatThreadPool"
executorTerminationTimeoutMillis="5000"/>
此处使用了org.apache.catalina.Executor实现,表示一个可在多个Connector间共享的线程池,而且有丰富的配置
-
namePrefix:创建的Tomcat线程名字的前缀
-
deamon:是否守护线程运行,默认true
-
minSpareThreads:线程池最小线程数,默认25
-
maxThreads:线程池最大线程数,默认200
-
maxIdleTime:空闲线程池的存活时间,默认60s。当线程空闲超过该时间后,线程将被回收
-
maxQueueSize:任务队列最大大小,默认是Integer.MAX_VALUE,建议该小,可以认为是maxConnections
-
prestartminSpareThreads:是否在Tomcat启动时就创建minSpareThreads个线程放入线程池,默认false
-
executorTerminationTimeoutMillis:在停止Executor时,等待请求处理线程终止的超时时间