Der Visual Studio Standalone-Profiler

Während der Entwicklung lassen sich Performanceprobleme bei ASP.NET Applikationen relativ einfach mit dem integrierten Profiler von Visual Studio 2015 analysieren.

Ist aber die Applikation bereits auf einem IIS deployed, gestaltet sich die Analyse um einiges aufwendiger, da üblicherweise auf den Web-Servern keine Entwicklungsumgebung zur Verfügung steht. Auch Probleme die erst während dem Betrieb der Applikation auftreten, lassen sich nicht mehr einfach analysieren.

Zum Glück bietet Microsoft den Visual Studio Profiler auch als stand-alone Applikation an. Das Setup-Programm des Profilers für die x86 bzw. x64 Plattform wird mit der Installation von Visual Studio unter C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\Setups abgelegt.

Sind die Tools auf dem Server installiert, dann kann es mit der Diagnose bereits losgehen. Alle nötigen Tools sind nach der Installation unter C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools zu finden.

Als erstes muss mit dem Script VSPerfCLREnv.cmd die Umgebung so konfiguriert werden, dass der Profiler ASP.NET Worker Prozesse "attachen" kann. Dabei stehen folgende Optionen zur Verfügung

VSPerfClrEnvOptions options

Mit globalsamplegclife wird also die Memory Allocation sowie die Object Lifetime aufgezeichnet. Diese Optionen sollten für die Analyse der meisten Probleme ausreichen.

$ VSPerfCLREnv.cmd /globalsamplegclife

Gemäss Dokumentation muss der Server neu gestartet werden. Ein iisreset müsste aber genügen, da nur der IIS neu gestartet werden muss.

$ iisreset

Der Profiler wird jetzt mit dem folgendem Kommando gestartet:

$ VSPerfCmd  /start:sample /output:c:\temp\result\profile.vsp /CrossSession /user:profilertest

Als /user muss der Application Pool User der Applikation angegeben werden. Dies ist der User unter welchem der w3wp.exe Prozess läuft und kann via Taskmanager einfach herausgefunden werden.

VSPerfClrEnvOptions options

Somit ist der Profiler gestartet und bereit eine ASP.NET Applikation zu "profilen". Dies geschieht über /attach an einen w3wp.exe Prozess. Die nötige Prozess-ID liefert wieder der Taskmanager.

$ VSPerfCmd  /attach:3948

Während der Profiler im Hintergrund Daten sammelt, kann mit der Applikation normal weitergearbeitet werden. Mit den folgenden Kommandos wird der Profiler gestoppt.

$ VSPerfCmd /detach
$ VSPerfCmd /shutdown

Sobald der Profiler gestoppt ist, werden die aufgezeichneten Daten in Form einer .vsp Datei im oben angegebenen output-Verzeichis abgelegt. Diese .vsp Datei kann nun bequem mit Visual Studio geladen werden.

pdb and dll

Visual Studio kann eine detailiertere Ansicht anzeigen, wenn zu dieser .vsp Datei auch die entsprechenden Applikations-Dll’s mit den .pdb - Files abgelegt werden.

VsProfiler

Tip : Applikationen die auf dem Azure App Service laufen, lassen sich mit den KUDU Tools ebenfalls profilen.