Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Monitoring von ASP

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.

Remote Performance Monitoring

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)\Counter
Der \\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:
  1. Eine neue Abfrage wird mit OpenQuery erstellt
  2. Performance Counter werden mit AddCounter hinzugefügt
  3. Die aktuellen Werte der Counter werden mit CollectQueryData abgeholt. Um die Werte zu aktualisieren, reicht ein erneuter Aufruf.
  4. Die Werte werden mit GetFormattedCounterVal ausgelesen
  5. Die Abfrage wird mit CloseQuery geschlossen

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.

Active Server Pages Performance Counter Objekt

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).

CounterBeschreibung
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.

Auslesen einiger ASP Counter

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>

Schlußbemerkung

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

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000502.zip

Verwandte Artikel

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

Links zu anderen Sites

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.