2016-03-07 69 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解析圖像的響應,你可以選擇「取回所有嵌入的資源」