문제에 박히는 : 나는 JMeter의 성능 테스트를 시도하고 WCF 서비스를 내가 발견 한 그 서비스 응답 시간 더 많은 동시 요청이 전송되면 크게 증가합니다. 첫 번째 동시 요청은 예상 된 시간 내에 반환되지만 후속 요청마다 시간이 오래 걸립니다. 따라서 마지막 요청은 첫 번째 요청 시간의 두 배가 걸릴 수 있습니다. 여기 성능 문제는 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 개의 요청에 대해 기본값이 잘되어야 함).
서비스 설정 : 서비스는 Windows Server 2008 R2에서 .NET Framework 3.5의 IIS 6.1에서 실행됩니다. 우리는 또한 7
서비스 추적 IIS에서 같은 동작을 보았다 있지만 : 내가 추적을 설정하고이 서비스가 항상 각 응답을 처리하는 데 약 20 초가 소요 공개했다하지만를 받게되며가 바이트 연결에는 JMeter가보고 한 시간의 차이를 반영하는 시차가있는 시작 시간이 있습니다.
IIS의 서비스 활성화가 지연되는 것을 의미합니까? 마지막 스레드가 첫 번째 스레드의 20 배가 될 것으로 예상하므로 WCF에서 동시성 문제가 될 수 없습니다. 사전에
감사
이안
나는 내가 원하는 동시 요청의 수와 일치하도록 IIS에서 작업자 프로세스의 수를 증가시켜 일관된 반응을 얻을 관리했습니다 UPDATE 처리 할 서비스 (20) - 사이트를 Web Garden으로 만듭니다. WCF에서 일관된 수준의 성능을 얻으려면이 작업을 수행해야한다는 것이 놀랍지 만.
더 좋은 아이디어가있을 경우를 대비하여 질문을 남겨 두었습니다.
아니요, 우리는 이미 그것을 시도했습니다 :(. 우리는 현재 IIS 응용 프로그램 풀 재활용 또는 메시지 버퍼링이 약간의 영향을 미칠 가능성을보고 있습니다. – IainJMitchell