# Windows Performance Monitoring: Die Profi-Werkzeuge

TL;DR / Management Summary Während der Task Manager den Status-Quo zeigt, gehen der Ressourcenmonitor (resmon.exe) und der Leistungsmonitor (perfmon.msc) in die Tiefe. Wir nutzen sie, um herauszufinden, welcher Prozess die Festplatte blockiert, welche Netzwerkverbindung die Latenz verursacht und wie die CPU-Auslastung über einen längeren Zeitraum verläuft. Ein Senior Admin verlässt sich auf harte Metriken (Counter), um Hardware-Käufe oder Refactorings zu rechtfertigen.


# 1. Einführung & Werkzeuge

Vom Symptom zur Ursache.

  1. Ressourcenmonitor (resmon): Die “Live-Ansicht” der Hardware-Interaktion. Fokus auf Dateien, Sockets und Speicherseiten.
  2. Leistungsmonitor (perfmon): Die “wissenschaftliche” Analyse. Bietet Zugriff auf tausende interne Kernel-Counter.

# 2. Ressourcenmonitor: Den ‘Killer’ finden

Live-Analyse von I/O und CPU.

Der Ressourcenmonitor ist das beste Tool für Ad-hoc-Probleme.

# Fallbeispiel: “PC ist langsam”

  1. Datenträger-Tab: Sortieren Sie nach “Antwortzeit”. Wenn Prozesse > 100 ms brauchen, ist die Disk der Bottleneck.
  2. Arbeitsspeicher-Tab: Achten Sie auf “Harte Fehler/Sek” (Hard Faults). Hohe Werte bedeuten, dass Windows ständig aus dem Pagefile (Artikel 448) lesen muss -> RAM-Mangel.
  3. Netzwerk-Tab: Hier sehen Sie, welche Anwendung Bandbreite verbraucht (Ideal zum Finden von Hintergrund-Snycs oder Trojanern).

# 3. Deep Dive: PerfMon (Leistungsmonitor)

Counter und Schwellenwerte.

PerfMon arbeitet mit Countern. Hier sind die wichtigsten für den Enterprise-Einsatz:

# Die ‘Must-Watch’ Counter

# Datensammlersätze (Data Collector Sets)

Erstellen Sie einen Satz, um Daten über Stunden/Tage zu loggen:

  1. perfmon.msc -> Datensammlersätze -> Benutzerdefiniert.
  2. Dateiformat auf .csv stellen (für einfachen Import in Excel/Python).
  3. Intervall auf 15 Sekunden setzen.

# 4. Day-2 Operations: Automatisierung

Performance-Checks via CLI.

# PowerShell Performance Counter

# Aktuelle CPU Last aller Prozesse abfragen
Get-Counter "\Process(*)\% Processor Time" | Select-Object -ExpandProperty CounterSamples | Sort-Object CookedValue -Descending | Select-Object -First 10

# Logman (Der CLI-Wächter)

Verwenden Sie logman, um Datensammlungen via Skript zu starten und zu stoppen:

logman start MyMonitor -n "Admin-Capture"
# ... nach der Lastspitze ...
logman stop "Admin-Capture"

# 5. Troubleshooting & “War Stories”

Wenn die Metriken lügen.

# Top 3 Fehlerbilder

  1. Symptom: 100% CPU-Last, aber kein Prozess im Task Manager passt dazu.

    • Ursache: Interrupts / DPCs. Hardware-Treiber verursachen Last im Kernel-Space.
    • Tool: In PerfMon den Counter Processor \ % Interrupt Time prüfen.
  2. Symptom: RAM voll, obwohl “Standby” Speicher als frei angezeigt wird.

    • Ursache: Der Cache-Manager gibt den Speicher nicht schnell genug frei (oft bei großen Dateitransfers via SMB).
    • Lösung: RAMMap (Sysinternals) nutzen, um den “Empty Working Set” Befehl zu testen.
  3. Symptom: Hohe Disk-Last durch System (PID 4).

    • Analyse: In resmon unter “Datenträger” -> “Datenträgeraktivität” den Pfad prüfen. Oft ist es die Indexierung (SearchIndexer.exe) oder der Defender.

# “War Story”: Die 15.000 Geister-Handles

Ein Web-Service stürzte alle 2 Tage ab. CPU und RAM waren OK. Die Entdeckung: Im Ressourcenmonitor sahen wir im Tab “CPU” unter “Zugeordnete Handles”, dass der Prozess beim Absturz über 15.000 offene Handles auf die Registry hatte. Ursache: Ein Programmierfehler schloss die Registry-Keys nicht nach dem Lesen. Lehre: Performance ist nicht nur CPU/RAM. Handles und Threads sind begrenzte Ressourcen, die oft übersehen werden.


# 6. Monitoring & Alerting

Die Brücke zu Prometheus.

# windows_exporter (WMI Exporter)

Nutzen Sie den Open-Source Exporter, um alle PerfMon-Werte an Prometheus zu senden.


# 7. Fazit & Empfehlung

Performance-Analyse ist Detektivarbeit.


# Anhang: Cheatsheet

Aufgabe Befehl
Ressourcenmonitor resmon
Leistungsmonitor perfmon
Handle-Suche handle.exe (Sysinternals)
RAM-Details rammap.exe (Sysinternals)
Perf-Counter Liste Get-Counter -ListSet *

# Referenzen