Проблема с производительностью службы WCF (размещенной в IIS) при 20 одновременных запросах - PullRequest
2 голосов
/ 08 марта 2012

Проблема: У меня есть служба WCF, которую я пытаюсь протестировать с помощью JMeter , и я заметил, что время отклика службы значительно увеличивается, когда выполняется больше параллельных запросов.послал.Первый параллельный запрос возвращается в ожидаемое время, но каждый последующий запрос занимает все больше времени, так что последний запрос может удвоиться по сравнению с первым.

Вот снимок экрана выполненияв 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 запросов значения по умолчанию должны быть в порядке).

Настройка службы: Службаработает в IIS 6.1 на Windows Server 2008 R2 в .NET 3.5.Хотя мы также видели такое же поведение в IIS 7.

Трассировка службы: Я включил трассировку, и это показало, что службе всегда требуется около 20 секунд для обработки каждого ответа, ноПолученные байты соединения имеют ступенчатое время начала, которое отражает разницу во времени, сообщаемую JMeter.

Означает ли это отставание в активации службы IIS?Это не может быть проблемой параллелизма в WCF, так как вы ожидаете, что последний поток будет в 20 раз быстрее первого.

Заранее спасибо

Iain

ОБНОВЛЕНИЕ Мне удалось получить непротиворечивый ответ, увеличив число рабочих процессов в IIS, чтобы они соответствовали числу одновременных запросов, которые я хочу, чтобы служба обрабатывала (20) - делая сайт WebСад .Хотя меня удивляет, что вам нужно сделать это, чтобы получить постоянный уровень производительности от WCF.

Я оставлю вопрос открытым еще пару дней на случай, если у кого-нибудь появятся лучшие идеи.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Эта проблема была решена путем увеличения числа рабочих процессов для пула приложений в IIS.Как отмечается в этом сообщении в блоге, потенциально длительно работающие процессы в WCF должны поддерживаться несколькими рабочими процессами.

Существует также балансировка на веб-сервере, чтобы гарантировать, что рабочие процессы не превышают оперативную память компьютера и не загружаются в виртуальную память, что также может замедлять обработку.

1 голос
/ 09 марта 2012

Вы должны взглянуть на настройки регулирования. Значения по умолчанию очень низкие и обычно ограничивают количество одновременных запросов до 10.

Смотрите это сообщение в блоге: http://www.lybecker.com/blog/2010/10/06/wcf-throttling-%E2%80%93-part-1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...