Welcher Windows-Server-Administrator kennt sie nicht, die – teilweise unerklärlich und oftmals sporadisch – auftretenden Perflib-Fehlermeldungen im Anwendungsereignisprotokoll? Auch ich habe in der vergangenen Woche wieder mit diesen Meldungen “gekämpft” und versucht, Ursachen und mögliche Lösungen zu finden.

Verschiedene Dienste eines Windows-Server-Systems bieten Schnittstellen an, über die der Performance Monitor (perfmon) zur Laufzeit unterschiedliche Leistungsparameter auslesen, anzeigen und protokollieren kann. Diese Parameter lassen sich dann grafisch in einem Diagramm anzeigen und zur späteren Auswertung protokollieren – eine wirklich nützliche Sache, um beispielsweise die durchschnittliche Schreibrate (in Byte pro Sekunde) einer Datenbank auf einem Volume über einen längeren Zeitraum zu ermitteln.

Leider gibt es unter Windows immer wieder Probleme mit einigen Diensten, deren Leistungsindikatoren nicht zuverlässig funktionieren und zu allem Ärger, die produzierten Fehlermeldungen im Anwendungsereignisprotokoll des betreffenden System nur wenig aussagekräftig sind. Die häufigsten Meldungen sind bei mir:

Die Open-Prozedur für den Dienst “.NETFramework” in der DLL “C:\Windows\system32\mscoree.dll” war nicht erfolgreich. Die Leistungsdaten für diesen Dienst sind nicht verfügbar. Die ersten vier Bytes (DWORD) des Datenbereichs enthalten den Fehlercode.

Und die Meldung:

Die Open-Prozedur für den Dienst “BITS” in der DLL “C:\Windows\system32\bitsperf.dll” war nicht erfolgreich. Die Leistungsdaten für diesen Dienst sind nicht verfügbar. Die ersten vier Bytes (DWORD) des Datenbereichs enthalten den Fehlercode.

Eine Suche bei eventid.net liefert für diese Event-ID eine Fülle verschiedener Dienste, Ursachen und Lösungen. Allein eine wirkliche Fehlerursache konnte ich nirgends finden.

Microsoft bietet seit dem Betriebssystem Windows Server 2000 das Tool exctrlst.exe (Windows Resource Kit), mit dem sich die Leistungsindikatoren für die jeweiligen Dienste ein- bzw. ausschalten lassen. Man muss sich dieses Tool aber nicht mehr herunterladen, da das integrierte Kommandozeilen-Tool lodctr dieselben Funktionen erfüllt. So listet der Befehl

lodctr /q

alle im System registrierten Performance Counter (und deren Status) auf. Der Befehl

lodctr /r

erstellt zwar die Zeichenfolgen der Leistungsindikatoren – basierend auf den Registry-Einstellungen und der INI-Dateien – neu, dies beseitigte in meinem Fall aber nie oben aufgeführten die Fehlermeldungen.

Einzig die Deaktivierung der Performance Counter für den betreffenden Dienst schafft hier Abhilfe. Dies kann entweder mit dem Befehl

lodctr /d:”<Dienstname>”

oder direkt in der Registry vorgenommen werden. In der Registry werden die Einstellungen für die Perfomance Counter eines Dienstes immer in einem Unterschlüssel Performance gespeichert:

HKLM\SYSTEM\CurrentControlSet\Services\<Dienstname>\Performance

Ist dieser Schlüssel nicht vorhanden, so gibt es für diesen Dienst auch keine Leistungsindikatoren. Die Deaktivierung kann man durch die Erstellung eines neuen DWORD-Wertes in diesem Unterschlüssel vornehmen:

“Disable Performance Counters” = 0×1 (DWORD)

Leider führt diese Einstellung aber zur Abschaltung der Leistungsindikatoren. Zwar werden nun auch die Fehlermeldungen unterdrückt, eine Messung mit Hilfe des Performance Monitors ist für diesen Dienst allerdings passé.

Fazit

Leider ist das Problem nur scheinbar behoben – die wirkliche Ursache bleibt nach wie vor ungeklärt. Um die nervigen Fehlermeldungen im Ereignisprotokoll zu beseitigen, genügt mir diese Einstellung zumindest für Dienste, die ich nicht überwachen bzw. messen möchte. Wer Lösungen für obige Fehler kennt – über einen kurzen Kommentar würde ich mich freuen. Wie bei allen meinen Beiträgen gilt: Bei Tipps, Vorschlägen sowie Fragen oder Kritiken hinterlasst bitte einen Kommentar.