2012-03-08 7 views
2

문제에 박히는 : 나는 JMeter의 성능 테스트를 시도하고 WCF 서비스를 내가 발견 한 그 서비스 응답 시간 더 많은 동시 요청이 전송되면 크게 증가합니다. 첫 번째 동시 요청은 예상 된 시간 내에 반환되지만 후속 요청마다 시간이 오래 걸립니다. 따라서 마지막 요청은 첫 번째 요청 시간의 두 배가 걸릴 수 있습니다. 여기 성능 문제는 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 개의 요청에 대해 기본값이 잘되어야 함).

서비스 설정 : 서비스는 Windows Server 2008 R2에서 .NET Framework 3.5의 IIS 6.1에서 실행됩니다. 우리는 또한 7

서비스 추적 IIS에서 같은 동작을 보았다 있지만 : 내가 추적을 설정하고이 서비스가 항상 각 응답을 처리하는 데 약 20 초가 소요 공개했다하지만를 받게되며가 바이트 연결에는 JMeter가보고 한 시간의 차이를 반영하는 시차가있는 시작 시간이 있습니다.

IIS의 서비스 활성화가 지연되는 것을 의미합니까? 마지막 스레드가 첫 번째 스레드의 20 배가 될 것으로 예상하므로 WCF에서 동시성 문제가 될 수 없습니다. 사전에

감사

이안

나는 내가 원하는 동시 요청의 수와 일치하도록 IIS에서 작업자 프로세스의 수를 증가시켜 일관된 반응을 얻을 관리했습니다 UPDATE 처리 할 서비스 (20) - 사이트를 Web Garden으로 만듭니다. WCF에서 일관된 수준의 성능을 얻으려면이 작업을 수행해야한다는 것이 놀랍지 만.

더 좋은 아이디어가있을 경우를 대비하여 질문을 남겨 두었습니다.

답변

2

이 IIS의 응용 프로그램 풀에 대한 작업자 프로세스의 수를 늘리기에 의해 해결되었다 : 기본이 블로그 게시물을 참조 매우 낮으며 일반적으로 10

에 동시 요청의 수를 제한합니다. this 블로그 게시물에 언급 된 것처럼 WCF의 잠재적으로 오래 실행되는 프로세스는 여러 작업자 프로세스에서 지원해야합니다.

웹 서버에는 작업자 프로세스가 시스템 RAM을 초과하지 않고 가상 메모리로 들어가는 것을 방지하기위한 균형 작업이 있으며 이로 인해 처리 속도가 느려질 수도 있습니다.