Logbuch#control-center#monitoring
Ein Kreis in den Daten, eine Rekursion in der Anzeige — und der Tab stand
Von Niclas Hennrich
Etwas ist ausgefallen oder kaputtgegangen. Gehört zum Vorhaben Homelab Control Center.
- CPU des Renderprozesses vorher
- 100%
Das Symptom: Die Übersichtsseite meines Dashboards lud sichtbar — und war danach tot. Keine Navigation, keine Reaktion, der Renderprozess des Browsers dauerhaft auf 100 % CPU. Vier andere Seiten derselben Anwendung liefen einwandfrei.
Meine erste These war falsch. Die Übersicht ist die einzige Seite mit Live-Stream und rund zehn Diagrammen. Also: zu viele Neuberechnungen pro Sekunde, fehlende Memoisierung. Klingt plausibel, war es auch — nur eben nicht die Ursache. Der Fix wurde gebaut, ausgerollt und änderte nichts.
Die entscheidende Beobachtung kam erst danach: Der Renderer beantwortete nicht einmal mehr Kommandos der Entwicklerwerkzeuge. Das ist ein anderer Zustand als „viel zu tun". Das ist eine einzige Aufgabe, die nie endet — kein Sturm vieler kurzer Renders.
Eingrenzen statt raten. Ich habe die Bausteine der Seite über einen temporären URL-Parameter einzeln abschaltbar gemacht und jede Kombination gemessen. Das Ergebnis drehte die These um: Mit abgeschaltetem Live-Stream und allen Bausteinen an war es am schlimmsten. Der Stream war unschuldig.
Die Ursache: Die Topologie-Schnittstelle liefert jede Leitung in beiden Richtungen — einmal vom Switch-Port aus, einmal vom Host-Interface aus. Das ist für eine Karte richtig. Der Code, der daraus einen Baum baute, übernahm beide Richtungen ungeprüft als Kinder. Damit war der Graph zyklisch. Und die Komponente, die den Baum darstellt, ruft sich für jedes Kind selbst auf:
Switch → Server → Switch → Server → …Ein Zyklus in den Daten plus eine Rekursion ohne Abbruch. Der Browser hat genau das getan, worum man ihn gebeten hat.
Die Lösung: Der Kindbaum wird jetzt per Breitensuche als echter Spannbaum von der Wurzel aus aufgebaut — jeder Knoten genau einmal, Rückkanten auf bereits besuchte Knoten fallen weg. Danach fällt die CPU-Last von dauerhaft 100 % auf einstellige Werte.
Was ich mitnehme: Sobald Daten aus einem Graphen kommen, braucht jede rekursive Darstellung einen Zyklusschutz — auch dann, wenn die Daten „ja eigentlich" ein Baum sind. Und: Eine eingefrorene Seite und eine überlastete Seite sehen im Taskmanager gleich aus. Der Unterschied zeigt sich erst, wenn man prüft, ob der Renderer überhaupt noch antwortet.