12

Próbuję dowiedzieć się, jak profilować usługę WCF, aby móc zidentyfikować wszelkie wąskie gardła.
Znalazłem trochę informacji na linii, ale nic, co zakłada bez uprzedniej wiedzy, gdzie jestem.Jak zacząć z profilowaniem wydajności WCF

Jakie są zalecane DARMOWE narzędzia?

- visual studio tools 
- clrprofiler 

Here to informacje znalazłem używając vsperfcmd.exe do profilu usługi WCF i zgodnie z tym jest to bardzo proste, ale muszę wypełnić luki na gdzie zacząć. Moje założenia to skopiowanie VsPerfCLREnv i VsPerfCmd na serwer, który obsługuje moją usługę wcf i wykonanie pewnych kroków konfiguracyjnych, których nie jestem do końca pewien. Nie jestem też całkiem pewien, w jaki sposób będę mógł zobaczyć stos wywołań, aby ocenić wydajność każdego połączenia.

clrprofiler wydaje się nieco prostszy. Zakładam, że skopiowałbym clrprofiler.exe na serwer, File->Profile Service i dodałem polecenia name i start/stop. (czy jest to przyjazna nazwa lub nazwa pliku lub nazwa wyświetlana usługi?) Zakładam, że uruchomiłbym moje testy przeciwko usłudze i mogłem zobaczyć stos wywołań w clrprofiler. Czy to brzmi poprawnie?

[edycja] Nie jestem tak zainteresowany testowaniem sieci, ponieważ znajduje się ona na serwerze testowym, a jest to duży projekt wcf z wieloma programistami i nie jestem w stanie wprowadzić zmian w projekcie dla jedynym celem monitorowania wydajności. Chcę skupić się na działaniu rzeczywistych metod w nim zawartych.

Każda pomoc na rozpoczęcie jest bardzo doceniana.

+0

Możesz także użyć "Perfmon" - www.codeproject.com/Articles/431917/WCF-Service-Performance-Monitoring-using-Perfmon –

Odpowiedz

5

pewne rzeczy nauczyłem się, że ktoś może znaleźć pomocne:

nie można Profil zdalnego usługę, nawet w sieci lokalnej. Profiler musi działać na tym samym komputerze, co usługa. (To zajęło mi sporo czasu, aby się zorientować, być może dla ciebie oczywistym, ale nigdy nie zostało napisane, więc próbowałem to zrobić)

Visual Studio nie działało dla mnie, aby profilować moją usługę WCF. Udało mi się uzyskać pomoc zespołu ds. Profilowania VS, ale nigdy nie wyszło z niego dzięki działającemu rozwiązaniu.

VS nie działał zbyt wolno, aby połączyć i odłączyć profilera, a często przydzielał do moich plików binarnych i pozostawiał je w stanie uszkodzonym.

Pliki binarne .net nie muszą być oprzyrządowane, ponieważ zawierają metadane metod, co jest dziwne, że studio graficzne wciąż umieszczało moje pliki binarne próbując je przyswoić.

Próbowałem również samodzielny profiler VS, ale jest to bardzo skomplikowane w użyciu i wymaga ponownego uruchomienia mojego serwera.

Otrzymałem wewnętrzny profiler do pracy (po uzyskaniu prywatnego kompilacji od zespołu), więc nie jestem pewien, ile profilerów jest zaprojektowanych do pracy z usługą WCF.

Rzeczywiście ustawiłem profiler, aby oglądać usługę WAS, a następnie dodałem moje dodatkowe pliki binarne do profilera.

Eksplorator procesów jest przydatny podczas rozwiązywania problemów, jeśli profiler jest podłączony. Użyj go, aby spojrzeć na środowisko inetinfo.exe.

1

Czy można go uruchomić pod debuggerem?

Czy możesz znieść prostą, staroświecką metodę, którą po prostu działa? Here's one.

1

Oprócz komentarzy Mike'a, można użyć wbudowanych liczników wydajności WCF, aby zobaczyć szereg danych dotyczących wydajności, a także można zobaczyć czasy połączeń w śladzie WCF. Gdy już wiesz, które operacje są "wolne", zazwyczaj łatwiej jest dodać do nich niestandardowy kod czasowy/rejestracyjny niż w przypadku profilera ogólnego przeznaczenia do czegoś podobnego. To pochodzi od kogoś, kto pracował nad komercyjnymi profilerami.

6

Dla WCF nie wystarczy profilować swojego kodu, ponieważ wiele rzeczy dzieje się na stosie kanałów (bezpieczeństwo, deserializacja, formatowanie itp.). Dobrym sposobem wizualizacji jest użycie funkcji WCF Tracing na poziomie szczegółowym, a następnie użycie wartości service trace viewer, aby sprawdzić, ile czasu zajmuje jej przetwarzanie. Przeczytaj tutaj, jak wykonać configure and use WCF tracing. To jest najważniejsza rzecz, która sprawiła, że ​​zajmowałem się diagnozowaniem problemów WCF.

Oczywiście wszystkie inne profilowanie kodu, profilowanie bazy danych itp. Są również ważnym podejściem. Możesz nawet użyć narzędzia takiego, jak SoapUI, aby przetestować komunikację sieciową i narzuty wydajnościowe po stronie klienta, aby uzyskać bardziej kompleksowy test porównawczy.

+0

Tak. Sposób radzenia sobie z sytuacjami asynchronicznymi polega na 1) korzystaniu z losowych przerw w wątkach, aby upewnić się, że są one tak wydajne, jak to możliwe, a następnie 2) szczegółowego rejestrowania komunikatów, scalanego między procesami. Nie powiem, że studiowanie śladów wiadomości jest łatwe, ale jest skuteczne. Dla mnie było zaskakujące, jak szybko można uruchomić asynchroniczny protokół przekazywania wiadomości. –

+0

dziękuję, patrzę na śledzenie wcf, ale nie jestem pewien, czego szukać w wynikach. Interesują mnie przede wszystkim wąskie gardła wydajności serwera i komunikacji sieciowej oraz klienta. Mam kilka metod docelowych, które chcę analizować i zobaczyć, gdzie można wprowadzić ulepszenia. – earthling

+1

Po otwarciu śledzenia w przeglądarce śledzenia usług zobaczysz wszystkie działania w przetwarzaniu wiadomości mydła. Jedną z nich jest wykonanie kodu użytkownika i sprawdzenie, ile czasu poświęcasz. To da ci pojęcie, ile czasu zajmuje twój kod, aby wykonać. Ale tak naprawdę, jeśli potrzebujesz zgłębić wąskie gardło wydajności w swoim kodzie, musisz użyć profilera, takiego jak wbudowany profiler Visual Studio lub doskonały profiler wydajności nants z RedGate. – softveda

1

Narzędzia, które należy sprawdzić: svctracelogviewer (i włącz śledzenie zarówno w usłudze, jak i klientach). SoapUI do symulacji obciążenia (i analizy) oraz Fiddler, doskonałe narzędzie sniffer/diagnostyki HTTP.

+0

Czy wiesz, jak używać skrzypka do monitorowania ruchu wcf? Używam klienta testowego wcf i nie otrzymuję żadnych informacji w skrzypku. – earthling

+0

Czy próbujesz użyć Skrzypka do usługi uruchomionej na localhost? Jeśli tak, zapoznaj się z dokumentacją, co musisz zrobić, aby uruchomić ją. – larsw

+0

Usługa jest hostowana na serwerze testowym. Teraz, kiedy o tym myślę, nie jestem pewien, czy jest to możliwe w przypadku skrzypka, ponieważ usługa używa powiązania tcp. Być może jest to pytanie lepiej pozostawić dla nowego wątku. – earthling

Powiązane problemy