我知道在JMeterHTTP Request
中使用內置Java HTTP客戶端時,可能會也可能不會合並取決於JVM的實現和配置。JMeter是否池HTTP連接?
但是,使用HttpClient3.1或HttpClient4時JMeter池連接?
JMeter文檔中有一些提示可能存在,但文檔中沒有明確說明它。
如果有,有沒有辦法控制連接池?例如,你可以設置池的大小嗎?
我知道在JMeterHTTP Request
中使用內置Java HTTP客戶端時,可能會也可能不會合並取決於JVM的實現和配置。JMeter是否池HTTP連接?
但是,使用HttpClient3.1或HttpClient4時JMeter池連接?
JMeter文檔中有一些提示可能存在,但文檔中沒有明確說明它。
如果有,有沒有辦法控制連接池?例如,你可以設置池的大小嗎?
當使用HttpClient3.1或HttpClient4時,JMeter執行一些HTTP連接池。
在這兩種情況下,每個線程都會彙集連接。連接不會跨線程共享。
當使用HttpClient3.1時,JMeter在每個線程上使用SimpleHttpConnectionManager的實例。
當使用HttpClient4時,JMeter在每個線程上使用PoolingClientConnectionManager子類的一個實例,它使用PoolingClientConnectonManager的默認設置(每個路由2個連接,最多20個連接)。
JMeter沒有提供控制連接池參數的機制。我不得不去JMeter的源代碼找到這個答案。請參閱參考以下鏈接(2.13標記的代碼):
注:這個答案是正確的JMeter的2.13。 JMeter的其他版本的答案可能會有所不同。
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解析圖像的響應,你可以選擇「取回所有嵌入的資源」
是的,必須使用httpclient實現!非常感謝! – hao