众所周知,Keep-Alive功能使客户端到服务器端的链接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了创建或者从新创建链接。咱们常常所用的tomcat服务器就支持HTTP Keep-Alive。在http1.1中,keepalive默认是开启的。若是须要自定义配置keepalive参数,咱们能够在tomcat的server.xml中作以下配置:apache
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="600"
minSpareThreads="100"
acceptCount="700"tomcat
maxConnections="300" //与tomcat创建的最大socket链接数
connectionTimeout="20000"服务器
maxKeppAliveRequests="100" //请求个数超过这个数,强制关闭掉socket连接并发
keepAliveTimeOut="60000" //下次请求过来以前,socket连接保持多久
redirectPort="8443"
URIEncoding="utf-8"socket
/>函数
可是tomcat在实际处理请求的过程当中会根据工做线程池中繁忙线程数动态的对keepalive进行开启或者关闭,tomcat源码以下:性能
在org.apache.coyote.http11.AbstractHttp11Processor这个类的process方法中能够看到spa
会经过disableKeepAlive这个函数判断,咱们再来看看disableKeepAlive这个函数,以下:线程
经过代码会算出 繁忙线程数/最大线程数的比例,即threadRatio = (threadsBusy * 100) / maxThreads; 接着看getDisableKeepAlivePercentage这个函数code
能够看出,若是繁忙线程数/最大线程数 >75%,那么就会主动将keepalive关掉。
实际上这种自动调节措施也是一种防御措施,当客户端并发量比较大的时候,若是一致保持长链接,其实是很耗服务端资源的,会严重影响性能,因此这里tomcat会动态的根据繁忙线程数来决定是否使用keepalive。