Signatur
Beschreibung
sys_getloadavg() liest die Load-Average-Werte des Betriebssystems aus und gibt sie als indiziertes Array mit drei Einträgen zurück. Die Werte entsprechen der durchschnittlichen Anzahl der Prozesse, die sich in der Ausführungs- oder Warteschlange befunden haben – gemessen über die letzten 1 Minute (Index 0), 5 Minuten (Index 1) und 15 Minuten (Index 2).
Die Funktion ist besonders nützlich, um auf Serverseite eine einfache Auslastungsüberwachung zu implementieren, z. B. um bei hoher Last neue Anfragen abzulehnen, zeitaufwändige Hintergrundprozesse zu drosseln oder Monitoring-Dashboards mit Systemdaten zu versorgen.
Die Werte sind Fließkommazahlen. Ein Wert von 1.0 auf einem Single-Core-System bedeutet, dass der Prozessor zu 100 % ausgelastet war. Auf einem System mit mehreren CPU-Kernen teilt sich der Wert entsprechend auf – ein Load von 4.0 auf einem 4-Kern-System entspricht ebenfalls 100 % Auslastung.
Wichtig: Die Funktion steht nur auf Unix-ähnlichen Systemen (Linux, macOS, BSD usw.) zur Verfügung. Unter Windows ist sie nicht implementiert und gibt false zurück.
Rückgabewert
float-Werten zurück: Index 0 = Lastdurchschnitt der letzten 1 Minute, Index 1 = 5 Minuten, Index 2 = 15 Minuten. Gibt false zurück, wenn die Funktion auf dem aktuellen Betriebssystem nicht unterstützt wird (z. B. Windows).Beispiele
Grundlegende Verwendung – Systemlast ausgeben
<?php
$load = sys_getloadavg();
if ($load === false) {
echo "sys_getloadavg() wird auf diesem System nicht unterstützt.\n";
} else {
printf("Load Average: 1 min: %.2f | 5 min: %.2f | 15 min: %.2f\n",
$load[0],
$load[1],
$load[2]
);
}
Schutzmaßnahme bei hoher Last – Job-Verarbeitung drosseln
<?php
$maxLoad = 2.5; // Schwellenwert für einen Dual-Core-Server
$load = sys_getloadavg();
if ($load === false) {
// Auf Windows oder unsupportierten Systemen immer ausführen
echo "Systemlast nicht ermittelbar, führe Job aus.\n";
} elseif ($load[0] > $maxLoad) {
// Aktuelle 1-Minuten-Last ist zu hoch
http_response_code(503);
echo sprintf(
"Server aktuell ausgelastet (Load: %.2f). Bitte später erneut versuchen.",
$load[0]
);
exit;
} else {
echo sprintf(
"Systemlast in Ordnung (Load: %.2f). Starte Hintergrundjob...\n",
$load[0]
);
// ... Aufwändigen Job starten
}
// Wichtig · Fallstricke
Windows: sys_getloadavg() ist unter Windows nicht implementiert und gibt false zurück. Plattformunabhängiger Code sollte den Rückgabewert daher immer prüfen.
Interpretation: Der Lastdurchschnittswert ist relativ zur Anzahl der verfügbaren CPU-Kerne zu interpretieren. Mit PHP_INT_SIZE allein lässt sich die Kernanzahl nicht ermitteln – hierfür bietet sich z. B. das Auslesen von /proc/cpuinfo oder die Verwendung des nproc-Befehls via shell_exec() an.
Granularität: Die zurückgegebenen Werte sind Momentaufnahmen des Kernel-internen Load-Average-Zählers. Kurze Lastspitzen, die kürzer als die Messperiode dauern, werden möglicherweise nicht korrekt erfasst.