目录
三个参数:acceptCount、maxConnections、maxThreads
对tomcat处理http请求的过程的初步理解:
tomcat的Connector在某个指定的端口上侦听客户请求,接收浏览器发过来的tcp连接请求,创建一个Request和一个Response对象分别 用于和其你去端交换数据,然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给Engine,从Engine中获得响应 并返回给客户端。而Engine下封装的就是我们的web应用的处理过程。在默认NIO的情况下,这样一个过程是由单独的线程去实现的,也就是这个过程是并发的。
既然是并发,也就有了开发中要对tomcat做并发性能优化,目的是提高吞吐量。
tomcat优化:
三个参数:acceptCount、maxConnections、maxThreads
tpmcat处理请求时,会在accept队列中接收连接(当客户端向服务器发送请求时,如果客户端与OS完成三次握手建立了连接,则OS将该连接放入accept队列);在连接中获取请求的数据,生成request;然后会有单独线程去调用servlet容器处理请求;返回response。
acceptCount:队列的长度;当accept队列中连接的个数达到acceptCount时,队列满,进来的请求一律被拒绝。
maxConnections:处理请求的最大连接数。当Tomcat接收的连接数达到maxConnections时,不会再读取accept队列中的连接。NIO下这个参数的默认值是10000,APR/native的默认值是8192,而BIO的默认值为maxThreads(如果配置了Executor,则默认值是Executor的maxThreads)。
maxThreads:请求处理线程的最大数量。默认值是200(Tomcat7和8都是的)。如果该Connector绑定了Executor,这个值会被忽略,因为该Connector将使用绑定的Executor,而不是内置的线程池来执行任务。
结合处理请求的过程来分析acceptCount和maxConnections参数。基于tomcat中这两个参数的设置,运行在tomcat中的服务中可以同时接收的连接数为maxConnections+acceptCount。高并发情况下,acceptCount如果过大,在maxConnections达到上限后不会继续接受队列的连接,这样会使得请求响应时间较长,反之,如果过小,请求会被拒绝。
至于maxThreads就比较好理解。通常情况下maxThreads的配置会直接影响到我们的服务接受到的请求。在应用并发性能达到上限之前,maxThreads配置越大,应用程序收到的并发请求就越多。
使用NIO:
参数protocol="org.apache.coyote.http11.Http11NioProtocol"指的是NIO
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
基于三个参数配置对tomcat优化:
win版tomcat中默认的配置如下,protocol="HTTP/1.1"指的是BIO。linux中tomcat8默认使用是NIO。
<Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
使用线程池的方式对maxThreads参数和acceptCount参数进行配置
上面提到如果自定义了线程池,那么上面那种Connector中配置的maxThreads参数就可以不写,会被忽略。在BIO下maxConnections的值也是maxThreads的值
<Executor name="tomcatThreadPool"
namePrefix="tomcatThreadPool-"
maxThreads="1000"
maxIdleTime="60000"
minSpareThreads="50"/>
Connector 组件中配置acceptCount参数,并使用executor="tomcatThreadPool" 引用上面定义的线程池,
<Connector executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
acceptCount="1000"/>
来源:CSDN
作者:WannaRunning
链接:https://blog.csdn.net/qq_29569183/article/details/103793539