【问题标题】:Does JMeter pool HTTP connections?JMeter 是否池化 HTTP 连接?
【发布时间】:2016-09-10 18:54:22
【问题描述】:

我知道在 JMeter HTTP Request 采样器中使用内置 Java HTTP 客户端时,连接可能会或可能不会被池化,具体取决于 JVM 实现和配置。

但是,在使用 HttpClient3.1 或 HttpClient4 时,JMeter 是否池化连接?

在 JMeter 文档中有一些提示,但文档中没有明确说明。

如果有,有没有办法控制连接池?例如,可以设置池的大小吗?

【问题讨论】:

    标签: java jmeter


    【解决方案1】:

    JMeter 在使用 HttpClient3.1 或 HttpClient4 时会进行一些 HTTP 连接池。

    在这两种情况下,连接都是按线程池化的。连接不跨线程共享。

    使用 HttpClient3.1 时,JMeter 在每个线程上使用SimpleHttpConnectionManager 的实例。

    使用 HttpClient4 时,JMeter 在每个线程上使用 PoolingClientConnectionManager 子类的实例,并使用 PoolingClientConnectonManager 的默认设置(每个路由 2 个连接,最大连接数为 20)。

    JMeter 不提供控制连接池参数的机制。

    我必须去 JMeter 的源代码才能找到这个答案。请参阅以下链接以供参考(2.13 标记代码):

    注意:这个答案对于 JMeter 2.13 是准确的。对于其他版本的 JMeter,答案可能会有所不同。

    【讨论】:

    • 是的,必须使用httpclient实现!非常感谢!
    【解决方案2】:

    JMeter 3 更新:在您的 HTTPSampler 配置中,您可以使用条目

     <boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
     <stringProp name="HTTPSampler.concurrentPool">10</stringProp>
    

    根据此代码片段指定连接池大小(来自http://svn.apache.org/viewvc/jmeter/tags/v3_0/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?view=markup line 785ff)

          if(this.testElement.isConcurrentDwn()) {
                try {
                    int maxConcurrentDownloads = Integer.parseInt(this.testElement.getConcurrentPool());
                        connManager.setDefaultMaxPerRoute(Math.max(maxConcurrentDownloads, connManager.getDefaultMaxPerRoute()));                
                    } catch (NumberFormatException nfe) {
                       // no need to log -> will be done by the sampler
                    }
                }
           }
    

    通过 JMeter UI 的配置有点古怪:

    将 HTTP 采样器配置视图切换到“高级”,勾选“检索所有嵌入式资源”,然后勾选“并行下载”并输入一个数字。如果您不希望 JMeter 解析您对图像的响应,则可以取消勾选“检索所有嵌入的资源”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 2015-03-28
      • 2023-04-11
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多