12

Ich versuche herauszufinden, wie Sie einen WCF-Dienst profilieren, damit ich Engpässe identifizieren kann.
Ich habe ein paar Informationen online gefunden, aber nichts, das keine vorherige Kenntnis annimmt, wo ich bin.Wie Sie mit WCF Performance Profiling beginnen

Was werden KOSTENLOSE Tools empfohlen?

- visual studio tools 
- clrprofiler 

Here sind Informationen, die ich mit vsperfcmd.exe gefunden WCF-Dienst profilieren und nach dieser ist es sehr einfach, aber ich brauche, um die Lücken zu füllen, wo zu beginnen. Meine Annahmen sind, VsPerfCLREnv und VsPerfCmd auf den Server zu kopieren, der meinen WCF-Dienst hostet, und einige Konfigurationsschritte auszuführen, auf denen ich nicht ganz sicher bin. Ich bin mir auch nicht ganz sicher, wie ich den Call-Stack sehen könnte, um die Leistung jedes Anrufs zu bewerten.

clrprofiler scheint ein bisschen einfacher. Ich nehme an, ich würde clrprofiler.exe auf den Server File->Profile Service kopieren und den Namen und Start/Stop-Befehle hinzufügen. (Ist das ein freundlicher Name oder Dateiname oder der Dienstanzeigename?) Ich nehme an, dass ich dann meine Tests gegen den Dienst ausführen würde und den Aufruf-Stack in clrprofiler sehen könnte. Klingt das richtig?

[Bearbeiten]
ich beim Testen des Netzwerkes nicht so interessiert bin, da dies auf einem Testserver ist, und das ist ein großes wcf Projekt mit mehreren Devs drauf und ich bin nicht in der Lage Änderungen an das Projekt zu machen für der einzige Zweck der Überwachung der Leistung. Ich möchte mich auf die Leistung der darin enthaltenen Methoden konzentrieren.

Jede Hilfe beim Start wird sehr geschätzt.

+0

Sie können auch "Perfmon" - www.codeproject.com/Articles/431917/WCF-Service-Performance-Monitoring-using-Perfmon –

Antwort

5

einige Dinge, die ich gelernt habe, dass jemand hilfreich finden könnte:

Sie nicht remote einen Service, auch über das lokale Netzwerk-Profil können. Der Profiler muss auf demselben Computer wie der Dienst ausgeführt werden. (Das hat mich wirklich eine ganze Weile gedauert, um es herauszufinden. Vielleicht ist es offensichtlich, aber es wurde nie geschrieben, also versuchte ich es zu tun)

Visual Studio funktionierte nicht für mich, um meinen WCF-Dienst zu profilieren. Ich konnte ein wenig Hilfe vom VS Profiler-Team bekommen, kam aber nie mit einer funktionierenden Lösung heraus.

VS war langsam zu verbinden und trennen Sie den Profiler und oft instrumentiert meine Binärdateien und ließ sie in einem beschädigten Zustand.

.net-Binärdateien müssen nicht instrumentiert werden, da sie die Metadaten der Methoden enthalten, was seltsam ist, dass das Visual Studio meine Binaries davon abgehalten hat, sie zu instrumentieren.

Ich habe auch versucht, die VS-Standalone-Profiler, aber das ist sehr komplex zu bedienen und erfordert Neustarts meines Servers.

Ich habe schließlich einen internen Profiler zum arbeiten bekommen (nachdem ich einen privaten Build vom Team bekommen habe), also bin ich mir nicht sicher, wie viele Profiler da draußen entwickelt wurden, um mit einem WCF Service zu arbeiten.

Ich habe den Profiler tatsächlich auf den WAS-Dienst eingestellt und dann meine zusätzlichen Binärdateien zum Profiler hinzugefügt.

Process Explorer ist nützlich bei der Fehlersuche, wenn der Profiler angeschlossen ist oder nicht. Verwenden Sie es inetinfo.exe Umgebung

1

Können Sie es unter einem Debugger ausführen?

Können Sie stehen eine einfache, altmodische Methode, die funktioniert einfach? Here's one.

1

Zusätzlich zu Mikes Kommentaren können Sie die integrierten WCF-Leistungsindikatoren verwenden, um eine Reihe von leistungsbezogenen Metriken anzuzeigen. Außerdem können Sie die Anrufzeiten in einer WCF-Ablaufverfolgung anzeigen. Sobald Sie wissen, welche Operationen "langsam" sind, ist es normalerweise einfacher, diesen Operationen einen eigenen Timing/Logging-Code hinzuzufügen, als einen Allzweck-Profiler für so etwas zu verwenden. Dies kommt von jemandem, der früher an kommerziellen Profilern gearbeitet hat.

6

Für WCF ist es nicht ausreichend, den Code nur zu profilieren, da viele Dinge auf dem Channel-Stack passieren (Sicherheit, Deserialisierung, Formatierung usw.). Eine gute Möglichkeit, dies zu visualisieren, ist die Verwendung von WCF-Ablaufverfolgung auf ausführlicher Ebene und dann die Verwendung der service trace viewer, um zu sehen, wie lange es bei jedem Schritt der Nachrichtenverarbeitung dauert. Lesen Sie hier, wie Sie zu configure and use WCF tracing. Dies ist das Einzige, was mich mit der Diagnose von WCF-Problemen belastet hat.

Natürlich sind auch alle anderen Code Profiling, DB Profiling etc. gültige Ansatz. Sie können sogar ein Tool wie SoapUI verwenden, um Ihre Netzwerkkommunikation und den clientseitigen Leistungsaufwand für einen umfassenderen End-to-End-Benchmark zu testen.

+0

Ja. Die Art, wie ich mit asynchronen Situationen umgehe, ist 1) verwende Zufalls-Pause bei Threads, um sicherzustellen, dass sie so effizient wie möglich sind, und dann 2) eine detaillierte Nachrichtenprotokollierung durchzuführen, die über Prozesse hinweg zusammengeführt wird. Ich werde nicht sagen, das Studium von Nachrichtenspuren ist einfach, aber es ist effektiv. Für mich war es überraschend, wie schnell ein asynchrones Message-Passing-Protokoll ausgeführt werden konnte. –

+0

danke, ich schaue in die wcf Ablaufverfolgung, aber ich bin mir nicht sicher, was in der Ausgabe suchen. Ich bin hauptsächlich an den Leistungsengpässen der Server-Netzwerk-Kommunikation und des Clients interessiert. Ich habe einige Zielmethoden, die ich analysieren möchte und sehe, wo Verbesserungen vorgenommen werden können. – earthling

+1

Wenn Sie den Trace in der Dienstablaufanzeige öffnen, werden alle Aktivitäten in einer Soap-Nachrichtenverarbeitung angezeigt. Eine davon ist die Aktivität Benutzercode ausführen und Sie sehen, wie viel Zeit Sie verbringen. Dadurch erhalten Sie eine Vorstellung davon, wie viel Zeit Ihr Code zur Ausführung benötigt. Aber in der Tat, wenn Sie Leistungsengpässe in Ihrem Code aufschlüsseln müssen, müssen Sie einen Profiler wie den integrierten Visual Studio Profiler oder den ausgezeichneten nants Leistungsprofiler von RedGate verwenden. – softveda

1

Tools, die Sie untersuchen sollten: svctracelogviewer (und die Überwachung sowohl in Ihrem Dienst als auch in Ihren Clients aktivieren). SoapUI zum Simulieren von Load (und Do-Analyse) und Fiddler, ein exzellentes HTTP-Sniffer/Diagnose-Tool.

+0

Weißt du, wie man den fiddler benutzt, um den wcf-Verkehr zu überwachen? Ich benutze den Test-Client und bekomme keine Informationen in Fiddler. – earthling

+0

Versuchen Sie, Fiddler gegen einen Dienst zu verwenden, der auf localhost ausgeführt wird? Wenn ja, schauen Sie in die Dokumentation, was Sie tun müssen, um es zum Laufen zu bringen. – larsw

+0

Der Dienst wird auf einem Testserver gehostet. Jetzt, wo ich darüber nachdenke, bin ich mir nicht sicher, ob dies mit fiddler möglich ist, da der Dienst die tcp-Bindung verwendet. Vielleicht ist das eine Frage, die besser für einen neuen Thread bleibt. – earthling