• Tomcat server.xml中配置的connectionTimeout参数无效?客户端等待超时时间


    【转】https://segmentfault.com/q/1010000011412748

    在tomcat的配置文件server.xml中,可以设置Connector的参数,其中包含超时参数connectionTimeout。

    apache官网对于这些参数的解释:https://tomcat.apache.org/tom...

    本人对其中几个重要参数大致理解为(应该理解错了):

    • connectionTimeout:一个请求最多等待时间,超过则报错。
    • maxConnections:最多同时连接数,连接上不一定处理。超过连接数,则排队。
    • maxThreads:同时处理的线程数,经测试,理解无误。
    • acceptCount:等待队列长度,当超越maxConnections时,会进入等待队列。等待队列满之后,直接拒绝请求。

    对这些参数进行测试,然而遇到了疑惑。


    第一组测试

    设置:
    connectionTimeout为10000,
    maxConnections为2,
    maxThreads为2,
    acceptCount为2。

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="10000"
                   redirectPort="8443" 
                   maxConnections="2" maxThreads="2" acceptCount="2"/>
    

    写一个controller测试,sleep30s。

    @RequestMapping(value = "sync")
    @ResponseBody
    public String sync() throws InterruptedException {
        Thread.sleep(30000L);
        return "test success";
    }
    

      

    使用JMeter进行测试。

    测试结果,尝试三次都一致,如下:

    一共20次请求,失败14个。

    前两个请求,的确是在30s之后返回。

    失败的14个请求,都在52s左右。

    最后四个成功的请求,前两个在60s时返回,后两个在90s时返回。符合sleep30s的时间点。

    分析:

    1. 同时生成20次请求。
    2. maxConnections=2,有两个请求被连接上,acceptCount=2,有两个请求进行排队。
    3. 其余16个请求,应该在某处也“排着队”吧,就称为野生请求。
    4. maxThreads=2,两个请求同时处理,30s后,这两个请求处理完毕。
    5. 排队的两个请求连接,两个野生请求进入队列。
    6. 莫名其妙地在52s时,进行了一波等待超时判断,14个野生请求全部失败。
    7. 已经连接和在排队中的请求后续会成功处理。

    疑问:

    1. 52s来自何处,设置的connectionTimeout是10s呢。

    第二组测试

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="10000"
                   redirectPort="8443" 
                   maxConnections="10" maxThreads="2" acceptCount="5"/>
    

      

    其中设置:
    connectionTimeout为10000,
    maxConnections为10,
    maxThreads为2,
    acceptCount为5。

    仍发起20次请求,共失败5次

    失败的4次请求,仍然是在52s左右失败。

    之后的请求返回时间符合每30s返回两个的预期。

    分析:

    1. 连接10个,等待5个,每次处理2个。
    2. 30s后,2个请求成功返回,连接数变成8个,按照第一组的分析,会有2个等待请求顶上去。那么,最终失败的请求应该是3个,然而结果是5个。
    3. 猜测需要等到连接的请求全部完成后或完成一部分之后,等待请求才会顶上去,野生请求只能干等。

    疑问:

    1. connectionTimeout参数作用是?52s何处来?
    2. 其他几个参数理解是否正确?

      

  • 相关阅读:
    hive 之with....as的用法
    hive 之lateral view 函数用法
    linux 之 bash: telnet: command not found...报错
    mysql 之 一个库中所有表复制到另一个数据库中,实现两个表迁移
    mysql 之group by 后取每一组最大的一行值
    kettle 报错 Error converting characters into server's character set. Some character(s) could not be converted.
    mysql 之数据类型转换cast()函数和convert()函数
    hive 之基础知识及查询三
    hive 之基础知识及语法二
    Vue(十)
  • 原文地址:https://www.cnblogs.com/achengmu/p/13042065.html
Copyright © 2020-2023  润新知