W3docs

sys_getloadavg()

Dieser Artikel erklärt die PHP-Funktion sys_getloadavg(), ihre Funktionsweise und Beispiele zur Nutzung.

Dieser Artikel behandelt die PHP-Funktion sys_getloadavg(), einschließlich einer Übersicht, ihrer Funktionsweise und Verwendungsbeispielen.

Einführung in die Funktion sys_getloadavg()

Die Funktion sys_getloadavg() ist eine integrierte PHP-Funktion, die den durchschnittlichen Systemlastindex abruft. Beachten Sie, dass sie nur auf Unix-ähnlichen Systemen (Linux, macOS) verfügbar ist und unter Windows nicht funktioniert, wo sie false zurückgibt. Sie kann zur Überwachung der Systemleistung und zur Optimierung der Ressourcenzuweisung verwendet werden.

Die Funktion nimmt keine Argumente entgegen und gibt ein Array zurück, das drei Gleitkommazahlen enthält — den 1-, 5- und 15-Minuten-Lastdurchschnitt des Systems:

sys_getloadavg(): array

Was "Lastdurchschnitt" tatsächlich bedeutet

Der Lastdurchschnitt ist die durchschnittliche Anzahl von Prozessen, die entweder auf der CPU laufen oder darauf warten (oder auf Datenträger-E/A) über ein bestimmtes Zeitfenster. Die drei Werte ermöglichen es, einen Trend zu erkennen:

  • $load[0] — Last der letzten 1 Minute (aktuellster, volatilster Wert).
  • $load[1] — Last der letzten 5 Minuten.
  • $load[2] — Last der letzten 15 Minuten (glattester Wert, am besten für Trendanalysen).

Eine Faustregel: Teilen Sie die Last durch die Anzahl der CPU-Kerne. Eine 1-Minuten-Last von 4.0 auf einem 4-Kern-Rechner bedeutet, dass die CPU ungefähr vollständig ausgelastet ist; derselbe Wert auf einem 1-Kern-Rechner bedeutet, dass sie stark überlastet ist. Deshalb normalisiert man die Last fast immer anhand der Kernanzahl, bevor man Maßnahmen ergreift.

Verwendung der Funktion sys_getloadavg()

Die Verwendung der Funktion sys_getloadavg() ist unkompliziert. Sie gibt ein Array mit Lastdurchschnittswerten zurück, dessen Länge vor dem Zugriff auf bestimmte Indizes überprüft werden sollte. Hier ist ein Beispiel:

Verwendung der Funktion sys_getloadavg()

php— editable, runs on the server

In diesem Beispiel rufen wir sys_getloadavg() auf und weisen das zurückgegebene Array $load zu. Wir prüfen, ob das Array mindestens drei Elemente enthält, bevor wir den 1-, 5- und 15-Minuten-Lastdurchschnitt ausgeben.

Normalisierung der Last anhand der CPU-Kerne

Da eine rohe Lastzahl ohne Kenntnis der Kernanzahl bedeutungslos ist, teilt eine praktische Statusprüfung die Last durch die Kernanzahl und vergleicht sie mit einem Schwellenwert. Die Kernanzahl lässt sich unter Linux aus /proc/cpuinfo (oder nproc) auslesen:

<?php
function cpuCoreCount(): int
{
    // Linux: count processor entries in /proc/cpuinfo
    if (is_readable('/proc/cpuinfo')) {
        $cpuinfo = file_get_contents('/proc/cpuinfo');
        return max(1, substr_count($cpuinfo, 'processor'));
    }
    // Fallback for other systems
    return (int) (shell_exec('nproc') ?: 1);
}

$load  = sys_getloadavg();
$cores = cpuCoreCount();

$perCore = $load[0] / $cores;

if ($perCore > 1.0) {
    echo "WARNING: system is overloaded (" . round($perCore, 2) . " per core)\n";
} else {
    echo "OK: load per core is " . round($perCore, 2) . "\n";
}
?>

Hier wandelt $load[0] / $cores die absolute Last in einen Pro-Kern-Wert um: Ein Wert über 1.0 bedeutet, dass mehr ausführbare Prozesse vorhanden sind als Kerne, sodass Aufgaben in der Warteschlange stehen.

Leistungsüberlegungen

Die Funktion sys_getloadavg() ist ein nützliches Werkzeug zur Überwachung der Systemleistung. Sie liest jedoch direkt aus dem OS-Kernel und ist rechenintensiv nicht besonders aufwendig. Bei stark frequentierten Webanwendungen empfiehlt es sich dennoch, sie nicht bei jeder Anfrage aufzurufen, um unnötigen Overhead zu minimieren. Verwenden Sie sie für periodische Überwachung oder Diagnosechecks, nicht in engen Schleifen oder leistungskritischen Bereichen.

Fazit

Zusammenfassend bietet sys_getloadavg() eine schnelle Möglichkeit, Systemlastdurchschnittswerte auf Unix-ähnlichen Systemen abzurufen. Durch Normalisierung des Ergebnisses anhand der CPU-Kernanzahl und Überprüfung des zurückgegebenen Arrays können Sie die Systemleistung effektiv überwachen.

Weitere Diagnose- und Timing-Hilfsfunktionen finden Sie unter microtime() für hochauflösendes Timing, time() für den aktuellen Unix-Zeitstempel und syslog() zum Senden der resultierenden Warnmeldungen an den System-Logger. Zum Untersuchen des zurückgegebenen Arrays selbst wird count() in den obigen Beispielen verwendet.

Übungen

Übung
Was ist der Zweck der Funktion sys_getloadavg() in PHP?
Was ist der Zweck der Funktion sys_getloadavg() in PHP?
Was this page helpful?