2016-03-07 11 views
6

JMeterHTTP Requestで組み込みのJava HTTPクライアントを使用している場合、JVMの実装と構成によっては、サンプラー接続がプールされる場合とされない場合があります。JMeterはHTTP接続をプールしますか?

ただし、HttpClient3.1またはHttpClient4を使用しているときはJMeterプール接続はありますか?

JMeterのドキュメントにはいくつかのヒントがありますが、ドキュメントには何も記載されていません。

もしそうなら、接続プールを制御する方法はありますか?たとえば、プールのサイズを設定できますか?

答えて

8

JMeterは、HttpClient3.1またはHttpClient4を使用しているときにHTTP接続のプーリングを行います。

どちらの場合も、接続はスレッドごとにプールされます。接続はスレッド間で共有されません。

HttpClient3.1を使用する場合、JMeterは各スレッドでSimpleHttpConnectionManagerのインスタンスを使用します。

HttpClient4を使用する場合、JMeterは各スレッドでPoolingClientConnectionManagerのサブクラスのインスタンスを使用し、PoolingClientConnectonManagerのデフォルト設定を使用します(ルートごとに2つの接続と最大20の接続)。

JMeterは、接続プールのパラメータを制御するメカニズムを提供していません。

私はこの回答を見つけるためにJMeterのソースコードに行かなければなりませんでした。参照(2.13タグ付けされたコード)については、以下のリンクを参照してください:

注:この答えはJMeterの2.13のために正確です。答えは、JMeterの他のバージョンでは異なる場合があります。 JMeterの3のための

+0

はい、httpclientの実装を使用する必要があります。どうもありがとう! – hao

1

更新:あなたのHTTPSampler設定であなたは、このコード・スニペット(http://svn.apache.org/viewvc/jmeter/tags/v3_0/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?view=markupラインから785ff)に応じて、接続プールのサイズを指定するには、エントリ

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

を使用することができます

 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 
       } 
      } 
     } 

HTTPサンプラのコンフィグレーションビューを「詳細」に切り替えると、「Retすべての埋め込みリソースをrieve "、次に" Parallel Downloads "と入力して番号を入力します。その後、JMeterがイメージのレスポンスを解析しないようにする場合は、「すべての埋め込みリソースを取得する」のチェックを外すことができます。