http1.1长连接实战

Posted lyhero11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http1.1长连接实战相关的知识,希望对你有一定的参考价值。

实验:

client(apache httpclient) -> springboot(tomcat8 8081端口)

client 300线程, 每线程请求1000次,共30万request 。client 连接池用的fluent api默认最大连接数200(每route100)

tomcat 用的springboot内嵌的,默认最大接受连接数1万,工作线程调成800, 单连接maxKeepAliveRequest 调成1万,keepAliveTimeout用的默认的60s(与connectionTimeout一样)

现象:

  TCP数280+  ,time_wait约为0,8081端口TCP数约为200, 在测试过程中段,以上数值保持稳定。

结论:

  30万个请求,一直复用的200个长连接与tomcat进行通讯,

   如果将maxKeepAliveRequest改成默认的100的话,那么200连接与tomcat通讯100次之后,会被tomcat关闭而进入time_wait状态,time_wait约为950,8081端口TCP数约为1200,总TCP数约1200, 在测试过程中段,以上数值保持稳定。  推测约有10次被关闭的100连接进入time_wait状态。

调整springboot的maxKeepAliveRequest的代码:

@Configuration
public class TomcatConfig {
    @Bean
    public EmbeddedServletContainerFactory servletContainerFactory() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

        factory.addConnectorCustomizers(connector ->
                ((AbstractHttp11Protocol) connector.getProtocolHandler()).setMaxKeepAliveRequests(10000));

        return factory;
    }
}

 

以上是关于http1.1长连接实战的主要内容,如果未能解决你的问题,请参考以下文章

老李谈HTTP1.1的长连接 1

http1.0,http1.1和http2.0的区别

长连接,短连接及WebSocket介绍(含http1.0,1.1,2.0相关)

HTTP1.1 Keep-Alive到底算不算长连接?

nginx在代理到upstream时转换http1.1为http1.0,长连接转为短连接

HTTP1.0和HTTP1.1的主要区别