Start · Sprachen · PHP · Referenz · sys_getloadavg

sys_getloadavg

Funktion

Gibt die durchschnittliche Systemlast der letzten 1, 5 und 15 Minuten als Array zurück.

seit PHP 5.1.3 Kategorie: misc

Signatur

sys_getloadavg(): array|false

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

Typ
array|false
Beschreibung
Gibt ein indiziertes Array mit drei 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]
    );
}
Load Average: 1 min: 0.42 | 5 min: 0.61 | 15 min: 0.75

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
}
Systemlast in Ordnung (Load: 0.42). Starte Hintergrundjob...

// 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.