JMeter是否汇集了HTTP连接?

时间:2016-03-07 12:35:30

标签: java jmeter

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

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

JMeter文档中可能有一些提示,但文档中没有任何明确说明。

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

2 个答案:

答案 0 :(得分:9)

使用HttpClient3.1或HttpClient4时,JMeter会对HTTP连接进行一些汇总。

在这两种情况下,每个线程都会连接连接。连接不是跨线程共享的。

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

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

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

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

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

答案 1 :(得分:1)

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

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

根据此Code-Snippet指定连接池大小(来自http://svn.apache.org/viewvc/jmeter/tags/v3_0/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?view=markup第785行)

      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采样器配置视图切换为&#34;高级&#34;,勾选&#34;检索所有嵌入式资源&#34;,然后&#34;并行下载&#34;并输入一个数字。您可以取消选中&#34;检索所有嵌入的资源&#34;之后,如果您不希望JMeter解析您对图像的响应