Geschrieben von: Christoph Wille
Kategorie: Optimierung
This printed page brought to you by AlphaSierraPapa
Performance Monitoring ist ein weiterer Baustein am Weg zu einer erfolgreichen Website. Im letzten Artikel habe ich besonderes Augenmerk auf das Monitoring der Serverperformance gelegt, die mit den Performance Counter Objekten Memory, Processor und Physical/Logical Disk überwacht werden kann. Heute wende ich mich dem Active Server Pages Performance Counter Objekt zu, das spezielle Informationen über ASP zu Tage fördert.
Im letzten Artikel haben wir uns die Performance Counter mit Hilfe des Performance Monitors angesehen. Bei Servern, die im Internet laufen, hat man allerdings nicht immer Zugriff auf die Konsole mittels eines Remote Administration Tools (Remotely Possible, Terminal Services, ...) - besonders nicht, wenn man auf einem Shared Server eines Providers hostet.
Das kann man allerdings umgehen - mit Hilfe einer Gratis Komponente von AlphaSierraPapa (Downloadlink am Ende des Artikels). Die AspQPerfCounters Komponente erlaubt es, beliebige Performance Counter auszulesen - solange man weiß, wie sie heißen.
Generell sieht ein Counter wie folgt aus:
\\Machine\PerfObject(ParentInstance/ObjectInstance#InstanceIndex)\CounterDer \\Machine Teil ist optional; wenn er inkludiert ist, dann ist es der NetBIOS Name der Maschine (Achtung: für Maschinen außer der lokalen Maschine benötigt man die entsprechenden Benutzerrechte, um auf die Performancedaten zugreifen zu dürfen!).
Der Teil \PerfObject muß angeben werden, und stellt das Objekt dar, von dem man den Counter auslesen möchte. Sollte das Objekt Instanzen unterstützen (zB mehrere Prozessoren in einer MPS Maschine), muß man den InstanceIndex angeben.
Um das Ganze mit einem praktischen Beispiel für die AspQPerfCounters Komponente zu kombinieren:
Set objQPerfCnt = CreateObject("Softwing.AspQPerfCounters") bResult = objQPerfCnt.OpenQuery() bResult = objQPerfCnt.AddCounter("\\.\Active Server Pages\Requests/sec") bResult = objQPerfCnt.CollectQueryData() varResult = objQPerfCnt.GetFormattedCounterVal(_ "\\.\Active Server Pages\Requests/sec", 0) bResult = objQPerfCnt.CloseQuery()In der dritten Zeile wird der Counter Requests/sec für das Active Server Pages Objekt auf der lokalen Maschine zur Abfrage hinzugefügt. Generell wird das AspQPerfCounters Objekt wie folgt verwendet:
Welche Performance Counter gibt es nun eigentlich für das Active Server Pages Objekt? Darüber gibt die nächste Sektion Auskunft, und zwar etwas ausführlicher als der Performance Monitor von Microsoft.
Die folgende Tabelle beschreibt die einzelnen Performance Counter die für das Active Server Pages Objekt zur Verfügung stehen. Zur leichteren Orientierung sind sowohl die englischsprachigen als auch die deutschsprachigen Performance Counter Namen aufgeführt - weil teilweise die Übersetzungen aus dem Englischen nicht sehr intuitiv sind (und für den Performance Monitor kann man nur die deutschen Strings verwenden).
Counter | Beschreibung |
---|---|
Debugging Requests Debug-Anfragen |
Anzahl der Seiten, die eine Debug Anfrage einleiten (aufgrund eines Fehlers). |
Errors During Script Runtime Skriptlaufzeit-Fehler |
Gibt die Anzahl der Seiten (Anfragen im generellen) an, die durch einen Skriptlaufzeitfehler ausgelöst haben, und somit fehlgeschlagen sind. |
Errors From ASP Preprocessor ASP-Präprozessor-Fehler |
Anzahl der Fehler, die der ASP Präprozessor liefert. Gründe dafür sind ASP Skripts, die nicht korrekt für den Compiler vorbereitet werden können (zB fehlende oder fehlerhafte Includeanweisungen). |
Errors From Script Compilers Skript-Kompilierfehler |
Anzahl der Fehler, die beim Kompilieren von Skripts gefunden werden (pro Seite nur einer, da beim ersten Kompilierungsfehler abgebrochen wird). |
Errors/Sec Fehler/s |
Gesamtanzahl der pro Sekunde ausgelösten Fehler. |
Memory Allocated Reservierter Speicher |
Gesamtmenge (in Bytes) des Speichers, der von Active Server Pages im Moment allokiert ist. |
Request Bytes In Total Byte in Warteschlange |
Gesamtgröße aller Anfragen in Bytes, die auf Bearbeitung warten. |
Request Bytes Out Total Byte aus Warteschlange |
Gesamtmenge der mit Anworten an die Clients (Browser) geschickten Bytes. Standard HTTP Header werden in diese Zahl nicht miteingerechnet. |
Request Execution Time Bearbeitungszeit |
Die Ausführungszeit der zuletzt durchgeführten Anfrage in Millisekunden. |
Request Wait Time Anfragen-Wartezeit |
Wartezeit (in Millisekunden), die die aktuelle Anfrage in der Warteschlange verbracht hat. |
Requests Disconnected Unterbrochene Anfragen |
Anzahl der Anfragen die aufgrund von Kommunikationsfehlern abgebrochen wurden (vom Server). |
Requests Executing Browser-Anfragen |
Die Anzahl der Anfragen, die im Moment abgearbeitet werden. |
Requests Failed Total Fehlgeschlagene Anfragen insgesamt |
Anzahl der durch allgemeine Fehler, Autorisierungsfehler und Zurückweisungen fehlgeschlagenen Anfragen. |
Requests Not Authorized Nicht autorisierte Anfragen |
Anzahl der Anfragen die wegen Autorisierungsfehlern fehlgeschlagen sind. |
Requests Not Found Anfrage nicht gefunden |
Gesamtzahl der Anfragen, die auf nicht vorhandene Dateien zugreifen wollten. |
Requests Queued Aktuelle Anfragen |
Gesamtzahl der Anfragen, die in der Warteschlange auf Abarbeitung warten. |
Requests Rejected Abgelehnte Anfragen |
Anzahl der Anfragen, die nicht bearbeitet werden konnten, weil nicht genügend Serverresourcen zur Verfügung stehen. |
Requests Succeeded Erfolgreiche Anfragen |
Anzahl der erfolgreich abgearbeiteten Anfragen. |
Requests Timed Out Zeitüberschreitungen von Anfragen |
Anzahl der Anfragen, die wegen Laufzeitüberschreitung abgebrochen wurden. |
Requests Total Anfragen insgesamt |
Gesamtzahl der Anfragen seit der Web Service gestartet wurde (nur ASP Seiten!). |
Requests/Sec Anfragen/s |
Anzahl der pro Sekunde abgearbeiteten Anfragen. |
Script Engines Cached Skript-Engines im Cache |
Anzahl der verschiedenen Skriptsprachen, die von ASP im Speicher vorgehalten werden. |
Session Duration Sitzungsdauer |
Zeit in Millisekunden, die die letzte Session gedauert hat (Session hier nicht im Sinne von ASP sondern HTTP). |
Sessions Current Sitzungen |
Die Anzahl der momentan betreuten Sessions. |
Sessions Timed Out Zeitüberschreitungen von Sitzungen |
Anzahl der wegen Zeitüberschreitung abgebrochenen Sessions (seit Start des Web Service). |
Sessions Total Sitzungen insgesamt |
Gesamtzahl der Sessions (seit Start des Web Service). |
Templates Cached Vorlagen im Cache |
Die Anzahl der Vorlagen, die im Moment gecacht werden. |
Template Cache Hit Rate Trefferanteil im Vorlagen-Cache |
Prozentsatz der Anfragen die aus dem Vorlagen-Cache bedient werden konnten. |
Template Notifications Vorlagen-Meldungen |
Anzahl der Vorlagen die aus dem Cache genommen werden mussten, weil eine Änderung an der Vorlage gemeldet wurde. |
Transactions Aborted Abgebrochene Transaktionen |
Anzahl der abgebrochenen Transaktionen. |
Transactions Committed Durchgeführte Transaktionen |
Anzahl der durchgeführten Transaktionen. |
Transactions Pending Transaktionen in Bearbeitung |
Anzahl der im Moment in Bearbeitung befindlichen Transaktionen. |
Transactions Total Transaktionen insgesamt |
Gesamtanzahl der Transaktionen seitdem der Web Service gestartet wurde. |
Transactions/Sec Transaktionen/s |
Anzahl der pro Sekunde gestarteten Transaktionen. |
Das folgende Skript überwacht einige für Live-Server wichtige Performance Counter: diejenigen, die die Anzahl der Fehler und ihre Ursachen ausweisen. Mit diesem Skript bekommt man eine Idee, ob, und wenn ja was falschläuft.
<% @LANGUAGE=VBSCRIPT %> <% Option Explicit %> <% ' counters to watch Dim arrFriendlyName, arrCounterPath arrFriendlyName = Array("Total failed requests", _ "Errors per second (current)",_ "Runtime errors (total)", "Script compiler errors (total)",_ "ASP preprocessor errors (total)") arrCounterPath = Array("\\.\Active Server Pages\Requests Failed Total", _ "\\.\Active Server Pages\Errors/Sec", _ "\\.\Active Server Pages\Errors During Script Runtime",_ "\\.\Active Server Pages\Errors From Script Compilers", _ "\\.\Active Server Pages\Errors From ASP Preprocessor") %> <html> <head> <title>Testing AspQPerfCounters</title> </head> <h1>ASP Performance Counters for Debugging</h1> <body bgcolor="#ffffff"> <% Dim objQPerfCnt, bResult, varResult, i Set objQPerfCnt = CreateObject("Softwing.AspQPerfCounters") bResult = objQPerfCnt.OpenQuery() for i = 0 to UBound(arrCounterPath) bResult = objQPerfCnt.AddCounter(arrCounterPath(i)) next bResult = objQPerfCnt.CollectQueryData() for i=0 to UBound(arrCounterPath) varResult=objQPerfCnt.GetFormattedCounterVal(arrCounterPath(i),0) Response.Write "<b>" & arrFriendlyName(i) & "</b>: " Response.Write varResult & "<br>" & vbCrLf next %> </body> </html>
Die AspQPerfCounters Komponente sollte man zu einem wichtigen Tool in der Serverüberwachung machen - weil damit Performancedaten des Servers von einem beliebigen Ort aus einfach abrufbar werden. Die Counter des Active Server Pages Objekts erlauben es, Fehler bereits vor der Analyse der Web Logs zu identifizieren.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000502.zip
Einführung in Performance Monitoring
http:/www.aspheute.com/artikel/20000428.htm
Performance Monitoring a la .NET
http:/www.aspheute.com/artikel/20000809.htm
Webserver-Tuning mit XTune
http:/www.aspheute.com/artikel/20000814.htm
AspQPerfCounters Komponente
http://www.alphasierrapapa.com/IisDev/Components/Perfmon/
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.