2012-03-08 29 views
2

問題に見舞われている:私はJMeterで性能試験をしようとしているWCFサービスを持っている と私は気づいたそのサービスの応答時間より多くの同時要求が送信されると、大幅に増加します。最初の同時要求は予想される時間内に戻りますが、それ以降の各要求には時間がかかります。そのため、最後の要求は最初の要求の2倍の時間を要します。ここで パフォーマンスの問題は、20個の同時要求

はJMeterの中の実行のスクリーンショットです: Performance Test Results

コード:私は最小を裸にするWCFサービスをバック取り除かれているので、すべてのサービスメソッドがちょうどのThread.sleepが含まれてい ()わずかに長い実行プロセスをシミュレートします。次のように

[ServiceContract] 
public interface IAvailabilityService 
{ 
    [OperationContract] 
    Thing GetSomething(Request request) 
}  

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.PerCall, 
    AddressFilterMode = AddressFilterMode.Any)] 
public class AvailabilityService : IAvailabilityService 
{ 
    public Thing GetSomething(Request request) 
    { 
    Thread.Sleep(20000); 
    return new Thing(); 
    } 
} 

サービスが設定されています。

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="MyService.AvailabilityService" 
       behaviorConfiguration="DefaultServiceBehavior"> 
     <endpoint address="" 
        binding="basicHttpBinding" 
        bindingConfiguration="bindingConfig" 
        contract="MyService.IAvailabilityService" /> 
     </service>  
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="DefaultServiceBehavior">  
      <serviceMetadata httpGetEnabled="true"/>  
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="bindingConfig"> 
      <security mode="None"> 
      <transport clientCredentialType="None" /> 
      <message establishSecurityContext="false" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    </system.serviceModel> 
</configuration> 

私はまた、他の標準のHTTPバインディングとして実行するようにサービスを構成しようとしています。また、私はバインディング構成のレベルを調整してサービスを強化しようとしましたが(20の要求ではデフォルトは正常であるはずですが)。

サービスの設定: サービスは、.NET Framework 3.5のWindows Server 2008 R2のIIS 6.1で実行されています。 我々はまた、7

サービストレースIIS上で同じ動作を見てきましたけれども: は、私は、トレースをオンにしていると、このサービスが常に各応答を処理するために約20秒かかることを明らかにしましたが、レシーブが上のバイト接続には、JMeterによって報告された時間の差異を反映する、ずらした開始時間があります。

これは、IISによるサービスのアクティブ化の遅延を示唆していますか?最後のスレッドが最初のスレッドの20倍になると期待しているので、WCFの並行性の問題にはなりません。事前に

おかげ

イアン

私は私が欲しい同時要求の数と一致するようにIISでワーカープロセスの数を増やすことにより、一貫性のある応答を得ることができましたUPDATE サービスを処理する(20) - サイトをWeb Gardenにする。 WCFのパフォーマンスを一貫したレベルにするためには、これを行う必要があることは驚きです。

誰かがより良いアイデアを持っている場合に備えて、私は質問を開いておきます。

答えて

2

これは、IISでアプリケーションプールのワーカープロセスの数を増額することで解決された:デフォルトでは、このブログ記事を参照してください非常に低く、通常10

に同時要求の数を制限します。 thisのブログ記事では、WCFの長時間実行される可能性があるプロセスは、複数のワーカープロセスによってサポートされる必要があります。

Webサーバーには、ワーカープロセスがマシンのRAMを超えて仮想メモリに格納されないように、バランスのとれた処理があります。処理が遅くなる可能性もあります。

関連する問題