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

Опитвам се да разбера как да профилирам услуга на WCF, така че да мога да идентифицирам всички тесни места.
Намерих малко информация онлайн, но нищо, което предполага без предварителни познания къде се намира Аз съм в.

Какви са препоръчителните БЕЗПЛАТНИ инструменти?

- visual studio tools
- clrprofiler 

Тук е информацията, която намерих с помощта на vsperfcmd.exe за профилиране на wcf услуга и според това е много просто, но трябва да попълня празнините за това откъде да започна. Моите предположения са да копирам VsPerfCLREnv и VsPerfCmd на сървъра, който хоства моята wcf услуга, и да изпълня някои стъпки за конфигуриране, за които не съм съвсем сигурен. Също така не съм съвсем сигурен как бих могъл да видя стека на повикванията, за да оценя ефективността на всяко повикване.

clrprofiler изглежда малко по-прост. Предполагам, че ще копирам clrprofiler.exe на сървъра, File->Profile Service и ще добавя името и командите за стартиране/стоп. (това приятелско име или име на файл ли е, или показваното име на услугата?) Предполагам, че след това ще изпълня тестовете си срещу услугата и мога да видя стека на повикванията в clrprofiler. Звучи ли правилно?

[редактиране]
Не съм толкова заинтересован от тестване на мрежата, тъй като това е на тестов сървър и това е голям wcf проект с множество разработчици в него и не мога да правя промени в проекта с единствената цел за наблюдение на изпълнението. Искам да се съсредоточа върху ефективността на действителните методи в него.

Всяко съдействие за започване на работа се оценява високо.


person earthling    schedule 14.10.2010    source източник
comment
Можете също да използвате Perfmon - www.codeproject.com/Articles/431917/WCF-Service-Performance-Monitoring-using-Perfmon   -  person Milan Raval    schedule 24.08.2012


Отговори (5)


За WCF не е достатъчно да профилирате кода си само, тъй като куп неща се случват в стека на канала (сигурност, десериализация, форматиране и т.н.). Добър начин да визуализирате това е чрез използване на WCF проследяване на подробно ниво и след това използване на услугата trace viewer, за да видите колко време отнема всяка стъпка от обработката на съобщението. Прочетете тук как да конфигурирате и използвате WCF проследяване. Това е единственото нещо, което ми помогна да диагностицирам проблеми с WCF.

Разбира се, всички други профили на код, профилиране на DB и т.н. също са валиден подход. Можете дори да използвате инструмент като SoapUI, за да тествате вашата мрежова комуникация и производителност от страна на клиента за повече край -краен бенчмарк.

person softveda    schedule 15.10.2010
comment
да Начинът, по който се справям с асинхронни ситуации, е 1) да използвам произволна пауза на нишките, за да се уверя, че са възможно най-ефективни, и след това 2) да правя подробно регистриране на съобщения, обединени между процесите. Няма да кажа, че изучаването на следи от съобщения е лесно, но е ефективно. За мен беше изненадващо колко бързо може да бъде накаран да работи асинхронен протокол за предаване на съобщения. - person Mike Dunlavey; 15.10.2010
comment
благодаря, разглеждам проследяването на wcf, но не съм сигурен какво да търся в изхода. Интересувам се предимно от тесните места в производителността на сървъра спрямо мрежовата комуникация и клиента. Имам няколко целеви метода, които искам да анализирам и да видя къде могат да бъдат направени подобрения. - person earthling; 15.10.2010
comment
Ако отворите проследяването в инструмента за преглед на проследяване на услугата, ще видите всички дейности в обработката на сапунено съобщение. Един от тях е изпълнение на дейността с потребителски код и вижте колко време се изразходва. Това ще ви даде представа колко време отнема изпълнението на вашия код. Но наистина, ако трябва да разбиете тясното място на производителността във вашия код, трябва да използвате профилиращ инструмент като вградения профилиращ Visual Studio или отличния профилиращ профил на nants от RedGate. - person softveda; 16.10.2010
comment
Това си помислих. Опитвам се да използвам вградения профильор във VS2010, но веднага щом добавя dll към решението и го маркирам като инструмент, вече не мога да се свържа с услугата. Виждам на сървъра, че оригиналната dll се архивира и се поставя ново копие. - person earthling; 16.10.2010

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

не можете отдалечено да профилирате услуга, дори през вашата локална мрежа. Профайлърът трябва да работи на същата машина като услугата. (Това всъщност ми отне доста време, за да разбера. Може би е очевидно за вас, но никога не беше изписано, така че продължих да се опитвам да го направя)

Visual Studio не работи за мен, за да профилирам моята WCF услуга. Успях да получа малко помощ от екипа на VS profiler, но така и не излязох с работещо решение.

VS бавно свързваше и прекъсваше връзката с профайлъра и често инструментираше моите двоични файлове и ги оставяше в повредено състояние.

.net двоичните файлове не е необходимо да бъдат инструментирани, тъй като те съдържат метаданните на методите, което е странно, че Visual Studio продължаваше да изпръсква моите двоични файлове, опитвайки се да ги инструментира.

Пробвах и VS самостоятелния профайлър, но това е много сложно за използване и изисква рестартиране на моя сървър.

В крайна сметка накарах вътрешен профайлър да работи (след като получих частна компилация от екипа), така че не съм сигурен колко профайлъри там са проектирани да работят с WCF услуга.

Всъщност настроих профилиращия да гледа услугата WAS и след това добавих моите допълнителни двоични файлове към профилиращия.

process explorer е полезен при отстраняване на неизправности, ако профилиращият е свързан или не. Използвайте го, за да разгледате средата на inetinfo.exe

person earthling    schedule 29.11.2010

Можете ли да го стартирате под дебъгер?

Можете ли да понесете прост, старомоден метод, който просто работи? Ето едно.

person Mike Dunlavey    schedule 14.10.2010

В допълнение към коментарите на Майк, можете да използвате вградените броячи на производителност на WCF, за да видите редица показатели, свързани с производителността, и можете също да видите времена на повикване в проследяване на WCF. След като разберете кои операции са „бавни“, обикновено е по-лесно да добавите някакъв персонализиран код за време/регистриране към тези операции, отколкото да използвате профилиращ инструмент с общо предназначение за нещо подобно. Това идва от някой, който е работил върху комерсиални профайлери.

person 500 - Internal Server Error    schedule 15.10.2010

Инструменти, които трябва да разгледате: svctracelogviewer (и включете проследяването както във вашата услуга, така и в клиентите). SoapUI за симулиране на натоварване (и извършване на анализ) и Fiddler, отличен HTTP снифър/инструмент за диагностика.

person larsw    schedule 15.10.2010
comment
знаете ли как да използвате fiddler за наблюдение на wcf трафика? Използвам тестовия клиент wcf и не получавам никаква информация в fiddler. - person earthling; 15.10.2010
comment
Опитвате ли се да използвате Fiddler срещу услуга, работеща на localhost? Ако е така, погледнете в документацията какво трябва да направите, за да го накарате да работи. - person larsw; 18.10.2010
comment
Услугата се хоства на тестов сървър. Сега, като се замисля, не съм сигурен дали това е възможно с fiddler, тъй като услугата използва tcp обвързване. Може би този въпрос е по-добре да оставим за нова тема. - person earthling; 18.10.2010