Счетчики производительности 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. Для запуска этого средства перейдите в меню Пуск, щелкните Выполнить и введите perfmon.exe в диалоговом окне.
Примечание |
---|
Экземпляры счетчиков производительности могут быть выпущены до того, как диспетчер конечной точки обработает последние сообщения. Это может привести к тому, что данные производительности для некоторых сообщений не будут получены. |
Увеличение объема памяти для счетчиков производительности
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, чтобы получить имя экземпляра счетчика производительности. Далее приведены примеры использования.
Имя экземпляра счетчика службы можно получить с помощью свойства "CounterInstanceName" экземпляра Служба инструментария WMI.
Имя экземпляра счетчика конечной точки можно получить с помощью свойства "CounterInstanceName" экземпляра Конечная точка инструментария WMI.
Имя экземпляра счетчика операций можно получить с помощью метода "GetOperationCounterInstanceName" экземпляра Конечная точка инструментария WMI.
Дополнительные сведения об инструментарии WMI см. в разделе Использование Windows Management Instrumentation для диагностики.
Счетчики производительности службы
Счетчики производительности службы измеряют поведение службы в целом, их можно использовать для диагностики производительности всей службы. Их можно просмотреть с помощью системного монитора, выбрав объект производительности 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
Дополнительные сведения о получении доступа к счетчикам программным образом см. в разделе Программная архитектура счетчика производительности.