Поделиться через


Счетчики производительности WCF

Windows Communication Foundation (WCF) включает большой набор счетчиков производительности, помогающих оценить производительность приложения.

Включение счетчиков производительности

Вы можете включить счетчики производительности для службы WCF с помощью файла конфигурации app.config службы WCF следующим образом:

<configuration>  
    <system.serviceModel>  
        <diagnostics performanceCounters="All" />  
    </system.serviceModel>  
</configuration>  

Атрибут performanceCounters можно настроить так, чтобы включать определенный тип счетчиков производительности. Допустимы следующие значения:

  • All. Включены счетчики всех категорий (ServiceModelService, ServiceModelEndpoint и ServiceModelOperation).

  • ServiceOnly. Включены только счетчики категории ServiceModelService. Это значение по умолчанию.

  • Off. Счетчики производительности ServiceModel* отключены.

Если вы хотите включить счетчики производительности для всех приложений WCF, можно поместить параметры конфигурации в файл Machine.config. Дополнительные сведения о настройке достаточного объема памяти для счетчиков производительности на компьютере см. в разделе увеличение объема памяти для счетчиков производительности .

При использовании точек расширения WCF, таких как пользовательские вызывающие операции, следует также создавать собственные счетчики производительности. Это связано с тем, что при реализации точки расширения WCF может больше не создавать стандартные данные счетчиков производительности в пути по умолчанию. Если поддержка трассировки вручную путем создания счетчика производительности не реализована, можно не увидеть ожидаемые данные счетчика производительности.

Также счетчики производительности можно включить в коде следующим образом.

using System.Configuration;  
using System.ServiceModel.Configuration;  
using System.ServiceModel.Diagnostics;  
Configuration config = ConfigurationManager.OpenExeConfiguration(  
    ConfigurationUserLevel.None);  
ServiceModelSectionGroup sg = ServiceModelSectionGroup.GetSectionGroup(config);  
sg.Diagnostic.PerformanceCounters = PerformanceCounterScope.All;  
config.Save();  

Просмотр данных о производительности

Чтобы просмотреть данные, полученные от счетчиков производительности, можно использовать системный монитор (Perfmon.exe), поставляемый вместе с Windows. Чтобы запустить это средство, нажмите кнопку Пуски выберите пункт выполнить и введите в диалоговом окне.

Примечание

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

Увеличение объема памяти для счетчиков производительности

WCF использует отдельную общую память для категорий счетчиков производительности.

По умолчанию объем отдельной общей памяти составляет четвертую часть от объема глобальной памяти счетчиков производительности. По умолчанию объем глобальной памяти счетчиков производительности составляет 524 288 байт. Таким образом, три категории счетчиков производительности WCF по умолчанию имеют размер около 128 КБ. В зависимости от характеристик среды выполнения приложений WCF на компьютере память счетчика производительности может быть исчерпана. В этом случае WCF записывает ошибку в журнал событий приложений. В содержимом ошибки говорится, что счетчик производительности не был загружен, а запись содержит исключение "System. InvalidOperationException: в представлении файлов пользовательских счетчиков недостаточно памяти". Если трассировка включена на уровне ошибок, эта ошибка также будет отслеживаться. Если память счетчика производительности исчерпана, продолжение выполнения приложений WCF с включенными счетчиками производительности может привести к снижению производительности. Если вы обладаете правами администратора данного компьютера, настройте его так, чтобы выделить достаточно памяти для поддержки максимального количества счетчиков производительности, которые могут существовать в любое время.

В реестре можно изменить объем памяти счетчика производительности для категорий WCF. Для этого необходимо добавить новое значение DWORD с именем FileMappingSize в три следующих расположения и задать для него требуемое значение в байтах. Перезагрузите компьютер, чтобы эти изменения вступили в силу.

  • HKLM\System\CurrentControlSet\Services\ServiceModelEndpoint 4.0.0.0\Performance

  • HKLM\System\CurrentControlSet\Services\ServiceModelOperation 4.0.0.0\Performance

  • HKLM\System\CurrentControlSet\Services\ServiceModelService 4.0.0.0\Performance

Если множество объектов (например, ServiceHost) удаляется, но ожидает сборки мусора, счетчик производительности PrivateBytes регистрирует необычно большое количество объектов. Чтобы устранить эту проблему, можно либо добавить собственные счетчики, относящиеся к приложению, либо использовать атрибут performanceCounters, чтобы включить только счетчики уровня службы.

Типы счетчиков производительности

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

Можно использовать инструментарий WMI, чтобы получить имя экземпляра счетчика производительности. Например, примененная к объекту директива

  • Имя экземпляра счетчика службы можно получить с помощью свойства "Каунтеринстанценаме" экземпляра службы WMI.

  • Имя экземпляра счетчика конечной точки можно получить с помощью свойства "Каунтеринстанценаме" экземпляра конечной точки WMI.

  • Имя экземпляра счетчика операции можно получить с помощью метода "Жетоператионкаунтеринстанценаме" экземпляра конечной точки WMI.

дополнительные сведения об инструментарии WMI см. в разделе использование инструментарий управления Windows (WMI) для диагностики.

Счетчики производительности службы

Счетчики производительности службы измеряют поведение службы в целом, их можно использовать для диагностики производительности всей службы. Их можно просмотреть с помощью системного монитора, выбрав объект производительности ServiceModelService 4.0.0.0. Экземпляры именуются по следующей схеме:

ServiceName@ServiceBaseAddress

Счетчик в области действия службы агрегируется из счетчика в коллекции конечных точек.

Значение счетчиков производительности для создания экземпляра службы увеличивается при создании нового InstanceContext. Обратите внимание, что новый InstanceContext создается даже при получении неактивирующего сообщения (с существующей службой) или при подключении к экземпляру из одного сеанса, завершении сеанса и последующем повторном подключении из другого сеанса.

Счетчики производительности конечных точек

Счетчики производительности конечных точек позволяют просматривать данные о том, как именно конечная точка принимает сообщения. Их можно просмотреть с помощью системного монитора, выбрав объект производительности ServiceModelEndpoint 4.0.0.0. Экземпляры именуются по следующей схеме:

(ServiceName).(ContractName)@(endpoint listener address)

Данные аналогичны данным, собираемым для отдельных операций, но агрегируются только на конечной точке.

Счетчик в области действия конечной точки агрегируется из счетчиков в коллекции операций.

Примечание

Если две конечные точки имеют идентичные имена контрактов и адреса, они сопоставляются с одним и тем же экземпляром счетчика.

Счетчики производительности операций

Счетчики производительности операций можно просмотреть с помощью системного монитора, выбрав объект производительности ServiceModelOperation 4.0.0.0. Каждая операция содержит отдельный экземпляр. Следовательно, если указанный контракт имеет 10 операций, 10 экземпляров счетчика операций связаны с этим контрактом. Экземпляры объекта именуются по следующей схеме:

(ServiceName).(ContractName).(OperationName)@(first endpoint listener address)

Этот счетчик позволяет измерить, как используется вызов и насколько успешно выполняется операция.

Если счетчики видимы в нескольких областях, данные, полученные из более высокой области, агрегируются с данными, полученными из более низких областей. Например, Calls в конечной точке представляет сумму всех вызовов операций в конечной точке. Calls в службе представляет сумму все вызовов всех конечных точек в службе.

Примечание

При наличии одинаковых имен операций в контракте можно получить только экземпляры одного счетчика для обоих операций.

Программирование счетчиков производительности WCF

Несколько файлов устанавливаются в папку установки пакета SDK, что позволяет программно получить доступ к счетчикам производительности WCF. Эти файлы перечислены ниже.

  • _ServiceModelEndpointPerfCounters.vrg
  • _ServiceModelOperationPerfCounters.vrg
  • _ServiceModelServicePerfCounters.vrg
  • _SMSvcHostPerfCounters.vrg
  • _TransactionBridgePerfCounters.vrg

Дополнительные сведения о программном доступе к счетчикам см. в разделе Архитектура программирования счетчика производительности.

См. также