2016-03-07 189 views
6

我知道在JMeterHTTP Request中使用内置Java HTTP客户端时,可能会也可能不会合并取决于JVM的实现和配置。JMeter是否池HTTP连接?

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

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

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

回答

8

当使用HttpClient3.1或HttpClient4时,JMeter执行一些HTTP连接池。

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

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

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

JMeter没有提供控制连接池参数的机制。我不得不去JMeter的源代码找到这个答案。请参阅参考以下链接(2.13标记的代码):

注:这个答案是正确的JMeter的2.13。 JMeter的其他版本的答案可能会有所不同。

+0

是的,必须使用httpclient实现!非常感谢! – hao

1

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线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采样器配置视图切换到“高级”,勾选“Ret分享所有嵌入式资源“,然后”并行下载“并输入一个数字。如果你不想让JMeter解析图像的响应,你可以选择“取回所有嵌入的资源”