Das Symptom
Das Monitoring schlägt Alarm, oder ein Kollege schaut zufällig auf die Kopfzeile von top: load average 8, 9, 7. Auf einem Server mit vier Kernen klingt das nach brennender Hütte. Also wird top geöffnet, um den Schuldigen zu finden, und dort ist nichts. Die CPU-Auslastung steht bei ein paar Prozent, kein Prozess frisst Rechenzeit, die Lüfter drehen gelangweilt. Trotzdem fühlt sich das System zäh an: Ein ls im falschen Verzeichnis hängt, ein Dateidialog braucht ewig, die Anmeldung per SSH dauert.
Die naheliegende Deutung lautet, die Anzeige sei kaputt, oder irgendwo laufe heimlich ein Prozess, den top nicht zeigt. Daraus folgen die üblichen Reflexe: neu starten, mehr Kerne beantragen, wahllos Dienste beenden.
Die „Layer 8“-Wahrheit
Die Anzeige ist nicht kaputt, sie misst nur etwas anderes, als man glaubt. Die Load Average ist keine CPU-Auslastung in Prozent. proc_loadavg(5) definiert die ersten drei Werte in /proc/loadavg als Mittelwerte der „number of jobs in the run queue (state R) or waiting for disk I/O (state D)“. Gezählt werden also zwei Gruppen: Prozesse, die rechnen oder rechnen wollen, und Prozesse, die auf ein Gerät warten. uptime(1) beschreibt die zweite Gruppe unmissverständlich, ein Prozess in diesem Zustand „is waiting for some I/O access, eg waiting for disk.“
Damit löst sich der scheinbare Widerspruch auf. Hängt ein Netzlaufwerk, stockt eine externe Platte oder schreibt eine Sicherung gegen ein langsames Ziel, sammeln sich Prozesse im Zustand D. Sie verbrauchen keine Rechenzeit, deshalb sieht top die CPU im Leerlauf. Sie zählen aber zur Last, deshalb steht dort eine 8. Beide Anzeigen stimmen. Wer nur auf die CPU-Spalte schaut, sucht den Täter im falschen Raum.
Die zweite Falle steckt in der Zahl selbst. uptime(1) schreibt: „Load averages are not normalized for the number of CPUs in a system“. Eine Last von 1 heißt auf einem Rechner mit einem Prozessor Dauerbetrieb, auf einem mit vier laut derselben Seite, dass er drei Viertel der Zeit nichts zu tun hatte. Ohne die Zahl der Recheneinheiten daneben, die nproc liefert, ist jede Lastangabe ein Bruch ohne Nenner.
Die Diagnose dauert deshalb nur ein paar Minuten, wenn man die richtige Frage stellt: nicht wie hoch die Last ist, sondern woraus sie besteht. ps zeigt für jeden Prozess seinen Zustand. Viele D bedeuten Warten auf Ein- und Ausgabe, und dann hilft kein Prozessor der Welt, sondern nur der Blick auf Laufwerk, Verbindung oder den Sicherungsauftrag, der gerade zur falschen Zeit läuft. Viele R bedeuten, dass wirklich gerechnet wird, und erst dann ist die Frage nach mehr Kernen eine vernünftige.