Как начать работу с профилированием производительности WCF

Я пытаюсь выяснить, как профилировать службу WCF, чтобы я мог определить любые узкие места.
Я нашел немного информации в интернете, но ничего, что предполагает нет предварительного knowlege где я нахожусь.

что рекомендуются бесплатные инструменты?

- visual studio tools
- clrprofiler 

здесь это информация, которую я нашел с помощью vsperfcmd.exe для профиля службы wcf и в соответствии с этим это очень просто, но мне нужно заполнить пробелы на где для начала. Мои предположения-скопировать VsPerfCLREnv и VsPerfCmd на сервер, на котором размещена моя служба wcf, и выполнить некоторые шаги конфигурации, в которых я не совсем уверен. Я также не совсем уверен, как я смогу увидеть стек вызовов для оценки производительности каждого вызова.

clrprofiler кажется немного проще. Я предполагаю, что скопирую clrprofiler.exe на сервере, File->Profile Service и добавьте имя и команды start/stop. (это понятное имя или имя или отображаемое имя службы?) Я предполагаю, что затем я бы запустил свои тесты против службы, и я мог бы увидеть стек вызовов в clrprofiler. Это звучит правильно?

[edit]
Я не так заинтересован в тестировании сети, так как это на тестовом сервере, и это большой проект wcf с несколькими разработчиками на нем, и я не могу внести изменения в проект с единственной целью мониторинга производительности. Я хочу сосредоточиться на производительности фактических методов в нем.

любая помощь на начало работы очень ценится.

5 ответов


для WCF недостаточно профилировать ваш код только как куча вещей происходит в стеке каналов (безопасность, десериализация, форматирование и т. д.). Хороший способ визуализировать это-использовать трассировку WCF на подробном уровне, а затем использовать сервис просмотра трассировки чтобы узнать, сколько времени занимает каждый шаг обработки сообщений. Читайте здесь о том, как настройка и использование трассировки WCF. Это самое главное, что заставило меня диагностировать проблемы WCF.

конечно, все остальные профилирование кода, профилирование БД и т. д. допустимы и подходы. Вы даже можете использовать такой инструмент, как SoapUI чтобы проверить вашу сетевую связь и производительность на стороне клиента для более сквозного теста.


некоторые вещи, которые я узнал, что кто-то может найти полезным:

вы не можете удаленный профиль службы, даже через локальную сеть. Профилировщик должен работать на том же компьютере, что и служба. (На самом деле мне потребовалось довольно много времени, чтобы понять это. Может быть, очевидно для вас, но это никогда не было прописано, поэтому я продолжал пытаться это сделать)

Visual Studio не работал для меня, чтобы профилировать мою службу WCF. Я смог получить немного помощи от команды VS profiler, но так и не пришел из него с рабочим решением.

VS медленно подключал и отключал профилировщик и часто инструментировал мои двоичные файлы и оставлял их в поврежденном состоянии.

.NET двоичные файлы не нужно инструментировать, так как они содержат метаданные методов, что странно, что visual studio продолжал поливать мои двоичные файлы, пытаясь их инструментировать.

Я также пробовал VS standalone profiler, но это очень сложно использовать и требует перезагрузки моего сервер.

Я закончил тем, что получил внутренний профилировщик для работы (после получения частной сборки от команды), поэтому я не уверен, сколько профилировщиков предназначено для работы со службой WCF.

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

Process explorer полезен при устранении неполадок, если профилировщик подключен или нет. Используйте его для просмотра inetinfo.exe окружающей среды


можете ли вы запустить его под отладчиком?

можете ли вы выдержать простой, старомодный метод, который работает? здесь одна.


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


инструменты, которые вы должны изучить: svctracelogviewer (и включить трассировку как в вашем сервисе, так и в клиентах). SoapUI для моделирования нагрузки (и анализа) и Fiddler, отличный инструмент HTTP sniffer/diagnostics.