Как работать со счетчиками производительности и службой WCF в IIS? - PullRequest
7 голосов
/ 01 марта 2012

Привет,

У меня есть служба WCF в IIS7, которая взаимодействует с приложением winform через TCP (WAS), теперь мне нужно отслеживать производительность.

Я добавил это в файл web.config:

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

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

Iзатем откройте системный монитор (в режиме реального времени), щелкните правой кнопкой мыши и добавьте счетчики.Я раскрываю ServiceModelService 4.0.0.0 и выбираю Длительность звонков и вызовов, я также выбираю свою услугу (svc), указанную в списке Экземпляр выбранного объекта, и нажимаю кнопку Добавить.

При выборе Длительности звонков и вызовов в разделеServiceModelOperation 4.0.0.0, однако, нет экземпляра или операции для выбора?То же самое относится и к ServiceModelEndpoint 4.0.0.0?

При нажатии Ok будут добавлены два счетчика (ServiceModelService).

Затем я нажимаю разморозить дисплей и запускаю мое приложение winform, которое делает пару вызовов,однако я не вижу ничего в системном мониторе.Я попытался щелкнуть правой кнопкой мыши по одному из счетчиков производительности и выбрать «Scale Selected Counter», но это ничего не дает?

Цель состоит в том, чтобы просто посмотреть, насколько хорошо работает сервис WCF (скорость, продолжительность, количество,подключений и т. д.) и было бы замечательно проверить отдельные операции.

Пожалуйста, помогите!

Примечание: это статья, которой я пытался следовать: http://dkochnev.blogspot.com/2011/06/wcf-framework-40-monitoring-service.html

Ответы [ 2 ]

6 голосов
/ 04 апреля 2016

Похоже, что это может быть ошибкой (или конструктивной особенностью) работы счетчиков производительности.После некоторых попыток я нашел это на форумах MSDN :

У меня та же проблема.Похоже, что Microsoft обрезает конец имени операции при именовании экземпляра счетчика.Они заменяют усеченную часть каким-то двузначным магическим числом base-10.Я предполагаю, что это хеш, но кто знает, как это на самом деле генерируется.Суть в том, что этот номер не гарантированно уникален и может вызвать конфликты в именах счетчиков.Если такое столкновение происходит, кажется, что все счетчики конечных точек и операций исчезают (по крайней мере, для меня).

У меня есть два метода с именами UpdateMarkupChunk и UpdateMarkupCancel.Если я закомментирую одно или другое, чтобы другое не существовало, они оба преобразуются в UpdateMarkupC53 в имени экземпляра счетчика.Когда я комментирую их обоих, ни один из экземпляров счетчика не появляется для ServiceModelEndpoint или ServiceModelOperation.

Можете ли вы предложить обходной путь для этого, Microsoft?У меня уже есть производственная служба, которую я хотел бы отслеживать, и изменение названий операций не вариант.

И Microsoft ответила:

Выправильный.И это поведение разработано.Существует ограничение на длину имени экземпляра счетчика производительности.

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

(ServiceName). (ContractName). (OperationName) @ (адрес получателя первой конечной точки)

Когда экземпляр счетчика Windows Communication Foundation (WCF)имя превышает максимальную длину, WCF заменяет часть имени экземпляра хеш-значением.

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

Что больше, чем немного расстраивает.Поэтому, если Microsoft не решит эту проблему (либо длинные значения хеша, либо лучшую обработку коллизий с помощью счетчиков производительности), либо не предоставит подходящий обходной путь, мы работаем вслепую.

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

Службы WCF включают счетчики производительности, которые можно отслеживать с помощью монитора производительности Windows (Perfmon.exe). Вы можете запустить это из Администрирования в Windows Server 2003.

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

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

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

...