- Serverload
-
Load bezeichnet die momentan laufenden oder auf bestimmte Ereignisse wartenden Prozesse auf einem Computersystem. Man spricht dabei davon, dass „der Rechner einen Load von X hat“ (wobei X eine reelle Zahl größer gleich null ist). Sie wird landläufig mit der Auslastung eines Computersystems gleichgesetzt. In der Unix-Welt, aus der der Begriff kommt, spricht man meistens von Load Average, dem Durchschnitt der Load-Werte über einen Zeitraum.
Inhaltsverzeichnis
Load als Maßeinheit
Der Load ist die Anzahl der gerade laufenden oder auf Ereignisse wartenden Prozesse und ist demnach immer ganzzahlig (im Gegensatz zu dem Load Average auf Unix-Systemen). Solche Ereignisse sind sehr häufig das Beenden einer Schreib- oder Leseoperation von oder auf die Festplatte oder anderer Ein-/Ausgabegeräte. Die Load ist demnach ein Maß für auftretende Flaschenhals-Probleme. So laufen zum Beispiel auf einem durchschnittlichen Computersystem sehr viele Programme im Hintergrund, die im Normalfall so gut wie keine Last erzeugen. Da der Speicher des Systems durch Interaktionen des Benutzers volläuft, lagert das Betriebssystem die Prozesse vom Hauptspeicher auf Festplatte aus (swapping). Ab und zu muss es jedoch einzelne Prozesse wieder in den Speicher laden, damit es diese ausführen kann. Da die Festplatte im Verhältnis zum Hauptspeicher ein sehr langsamer Datenträger ist, kann sich dies bei akutem Hauptspeichermangel zu einem beachtlichen Load hochschaukeln, die bis zur Unbenutzbarkeit des ganzen Computersystems führen kann, obwohl der Prozessor dabei kaum nennenswert ausgelastet ist.
Die Load ist nicht die Auslastung des Computersystems, im speziellen nicht die Auslastung der CPU, sondern ein Maß dafür, wieviele gleichartige Systeme in einem Computer arbeiten müssten, um einen möglichen Engpass beseitigen zu können. Beispielsweise hat ein Computersystem einen Prozessor. Gleichzeitig benötigen zwei Prozesse die volle Rechenleistung (andere Ressourcen werden im Beispiel nicht beachtet). Das Betriebssystem verteilt nun die beiden Prozesse gleichmäßig so, dass Prozess 1 und Prozess 2 gleichmäßig viel Rechenleistung erhalten (Load Balancing). Die Load des Systems ist 2, die Auslastung der CPU liegt bei 100%. Man erweitert das Computersystem auf vier CPUs. Das Betriebssystem verteilt diese Last nun auf die zwei Prozesse, so dass also immer zwei CPUs voll arbeiten können, die beiden anderen liegen brach. Trotzdem rechnen die Prozesse nun doppelt so schnell und der Rechner hat dabei immer noch eine Load von 2, die Auslastung der CPUs ist jedoch nur 50%. Durch eine Programmverbesserung ist es nun möglich, die Last der zwei Prozesse auf alle vier CPUs zu verteilen. Die Load ist dann immer noch 2, die CPUs werden dabei aber zu 100% ausgelastet, das heißt, die beiden Programme rechnen nochmal doppelt so schnell.
Der Load Average auf Unix-Systemen
Der Load Average (frei übersetzt Durchschnittsbelastung) ist per Definition die (durchschnittliche) Länge der Run Queue der CPU sowie die Anzahl der Prozesse, die auf dieser laufen oder auf IO warten (Status D). Je nach System variiert die Zusammensetzung, genauso wie die üblichen Werte. Generell jedoch gilt: Je niedriger der Load-Wert, desto unbelasteter ist ein System, d.h. es stehen mehr Ressourcen zur Verfügung. Die untere Grenze beträgt Null. Ein Load Average von 0 sagt zum Beispiel aus, dass sämtliche Betriebsmittel zur Verfügung stehen und das System die Aufgaben eines Benutzers mit maximaler Geschwindigkeit bearbeiten kann.
Eine einheitliche obere Grenze für den Load-Wert gibt es nicht. Je nach Anzahl der CPUs und anderen Betriebsmittel wie zum Beispiel vorhandener RAM gibt es jedoch in der Regel stets einen Wert, ab dem das System unbenutzbar wird, denn ein hoher Load Average-Wert wird durch viele gleichzeitig laufende Prozesse hervorgerufen, die Rechenzeit benötigen. Möchte man währenddessen zum Beispiel in einer X-Sitzung arbeiten, so macht sich die extreme Systemauslastung dadurch bemerkbar, dass alles blockiert ist.
Typische Angabe und Auswertung des Load Averages
Üblicherweise werden zur Angabe des Load Averages drei Zahlenwerte angegeben, die jeweils den Load Average der letzten Minute, der letzten fünf Minuten und der letzten 15 Minuten angeben. Daraus kann man ablesen, wie sich die Auslastung des Systems entwickelt. Die drei Nummern nennt man oft auch Load Triplets.
Bei der grafischen Darstellung der Beispielwerte
0.89, 1.71, 3.35
fällt auf, dass die Last zurückgeht (siehe Grafik rechts). Dies kann passieren, weil es zum Beispiel weniger rechenintensive Prozesse gibt – Ursache dafür kann wiederum etwa das Beenden von Programmen sein. Beim Lesen der Zahlentriplets muss darauf geachtet werden, diese nicht falsch herum zu interpretieren. Die erste Zahl zeigt stets den aktuellen Load Average an, die letzte den Load Average über den 15-minütigen Zeitraum, nicht andersrum.In der Grafik auf der linken Seite werden die Werte
6.51, 5.13, 1.85
grafisch dargestellt. Man sieht, dass die Last auf dem Computer innerhalb der letzten 15 Minuten erheblich gestiegen ist, wobei in den letzten fünf Minuten der Anstieg durchschnittlich nachgelassen hat.Im Beispiel auf der Rechten kann man anhand der drei Zahlen feststellen, dass innerhalb der letzten Viertelstunde eine erhebliche Rechenlast abgearbeitet wurde, denn zum aktuellen Zeitpunkt liegt die Durchschnittslast wesentlich tiefer als vor fünf Minuten.
Aus den Load-Average-Werten kann ein Administrator mit wenig Aufwand feststellen, wie ausgelastet der Computer war. Im Gegensatz zu ressourcenfressenden Systemmonitoren bei anderen Betriebssystemen braucht ein Unix-Administrator lediglich zu jeder vollen Stunde den Load seines Rechners abzufragen und bekommt damit eine umfassende Statistik über den Auslastungswert. Die Auslastung wird vom Kernel automatisch berechnet, es bedarf keiner gesonderten Erfassung von Messwerten in Echtzeit.
Anhand der Systemauslastung kann man zum Beispiel auch bestimmte Programme erst dann starten, wenn der Rechner sich im Leerlauf befindet, der Load Average also sehr niedrig ist. Ein Beispiel hierfür ist der Unix-at-Daemon. Er bietet das
batch
-Utility, welches man anweisen kann, ein Programm zu starten, sobald der Load unter den Wert von1.5
fällt.Programme zum Anzeigen des Load Averages
Auf POSIX-kompatiblen Systemen lässt sich der Load Average üblicherweise mit dem Tool
uptime
ermitteln. Ein Aufruf aus der Shell ergibt zum Beispiel folgendes Ergebnis:00:58:04 up 7:07, 4 users, load average: 0.55, 0.60, 0.48
Neben dem Load Average wird auch Uhrzeit, die Zeit, seit der der Computer läuft (Uptime) sowie die Anzahl der angemeldeten Benutzer aufgezeichnet.
Weitere Tools zur Anzeige auf der Konsole sind zum Beispiel w[1] und top. Natürlich existieren auch grafische Tools, zum Beispiel das klassische xload (siehe rechts), viele moderne Desktop-Environments bringen auch eigene Tools mit (zum Beispiel KDE mit seinem Perfomancemonitor KSysguard).
Das weit verbreitete Unix-Derivat GNU/Linux bietet im Proc-Dateisystem einen Eintrag namens
/proc/loadavg
, welches unter anderem den Load Average wiedergibt:$ cat /proc/loadavg 0.27 0.47 0.45 1/186 8372
Prozentuale Auslastungswerte
Zwar ist die Benutzung des Load Average sehr praktisch und effizient, doch gibt es bei ihm keine Möglichkeit, die momentane Auslastung des Prozessors herauszufinden. Solche prozentualen Auslastungswerte werden zum Beispiel im weit verbreiteten Betriebssystem Microsoft Windows verwendet, um die Auslastung des Systems auszugeben. Einen Load Average kennt Windows nicht.
Prozentuale Auslastungswerte bei Linux
Um in Linux einen prozentualen Auslastungswert zu erhalten, muss die Datei
/proc/stat
aus dem Proc-Dateisystem ausgelesen werden. Sie enthält in den cpu-Zeilen Werte für User, Nice, System und Idle-Zeiten seit Systemstart. Diese bedeuten:- User: Die CPU-Ressourcen, die durch Benutzerprozesse durchgeführt werden.
- Nice: Zeit für Benutzerprozesse, die mit einem sehr hohen Nice-Wert laufen. Dies ist die unter Unix übliche Technik, um Prozessen eine niedrigere Priorität zu geben. Prozesse mit sehr niedriger Priorität werden nur ausgeführt, wenn der Rechner sonst unbeschäftigt ist (Prioritätsscheduling).
- System: Ressourcen, die das System, d.h. der Linux-Kernel verbraucht.
- Idle: Stellt den Leerlaufanteil des Prozessors dar, in dem keine Befehle von ihm abgearbeitet werden. Er befindet sich während einer solchen Phase im Idle-Zustand.
Die CPU-Auslastung entspricht dem invertierten prozentualen Anteil, den Idle in der Gesamtkalkulation einnimmt. Ein Beispiel für die Datei
/proc/stat
:cpu 35421 0 4092 158570 3325 408 6 0 cpu0 35421 0 4092 158570 3325 408 6 0 [...]
Relevant sind jeweils die ersten vier Zahlen, die für User, Nice, System und Idle stehen. Zusammengerechnet geben sie im Beispiel 198.083, wovon der Idle-Wert 158.570 ausmacht, was etwa 80% des Gesamtwerts entspricht. Die effektive CPU-Auslastung seit Systemstart liegt also bei gerade 20%. Um eine prozentuale CPU-Auslastung über einen bestimmten Zeitraum zu erhalten, muss die Veränderung dieser Werte über diesen Zeitraum durch zweimaliges Auslesen der Datei ermittelt werden.
Load auf Windows-Systemen
Unter Windows wird der Load nicht bestimmt. Stattdessen wird die Auslastung der CPU als prozentualer Wert angegeben, 100% bedeuten hier unabhängig vom System volle Auslastung. Die Zahl der wartenden Prozesse lässt sich daraus nicht ablesen.
Angezeigt wird die Systemlast in Windows-NT-basierten Systemen (Windows NT 4.0, 2000, XP, 2003 und Vista) im Task-Manager.
Weblinks
- UNIX Load Average: How It Works, von Neil J. Gunther (englisch)
Fußnoten
Wikimedia Foundation.