問題に見舞われている:私はJMeterで性能試験をしようとしているWCFサービスを持っている と私は気づいたそのサービスの応答時間より多くの同時要求が送信されると、大幅に増加します。最初の同時要求は予想される時間内に戻りますが、それ以降の各要求には時間がかかります。そのため、最後の要求は最初の要求の2倍の時間を要します。ここで パフォーマンスの問題は、20個の同時要求
はJMeterの中の実行のスクリーンショットです:コード:私は最小を裸にする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のパフォーマンスを一貫したレベルにするためには、これを行う必要があることは驚きです。
誰かがより良いアイデアを持っている場合に備えて、私は質問を開いておきます。
いいえ、私たちはすでにそれを試みました:(。私たちは現在、IISのアプリケーションプールのリサイクルやメッセージのバッファリングに影響を与えている可能性を検討しています。 – IainJMitchell