Start · Sprachen · PHP · Referenz · posix_getrlimit

posix_getrlimit

Funktion

Liefert Informationen über das aktuelle Soft- und Hard-Limit einer Systemressource des laufenden Prozesses.

seit PHP 5.0.0 Kategorie: misc

Signatur

posix_getrlimit(int $resource = POSIX_RLIMIT_ALL): array|false

Beschreibung

posix_getrlimit() ruft die Ressourcen-Limits des aktuell laufenden Prozesses ab, wie sie vom Betriebssystem verwaltet werden. Jede Ressource besitzt zwei Grenzen: das Soft-Limit (rlim_cur), das der Kernel für den Prozess aktuell durchsetzt, und das Hard-Limit (rlim_max), das die Obergrenze darstellt, bis zu der ein unprivilegierter Prozess sein Soft-Limit erhöhen darf.

Wird kein Argument übergeben oder der Konstante POSIX_RLIMIT_ALL übergeben (ab PHP 8.3 verfügbar), werden alle Ressourcen auf einmal zurückgegeben. Andernfalls gibt man eine der POSIX_RLIMIT_*-Konstanten an, z. B. POSIX_RLIMIT_NOFILE für die maximale Anzahl offener Dateideskriptoren oder POSIX_RLIMIT_AS für den virtuellen Adressraum.

Die Funktion ist auf POSIX-kompatiblen Systemen (Linux, macOS, BSD) verfügbar und erfordert die POSIX-Erweiterung. Typische Anwendungsfälle sind Monitoring-Scripts, CLI-Tools, die prüfen ob genug Dateideskriptoren verfügbar sind, oder Server-Anwendungen, die ihre eigenen Limits vor dem Start validieren.

Ein Rückgabewert von POSIX_RLIMIT_INFINITY (in der Regel -1 oder eine sehr große Zahl) bedeutet, dass für diese Ressource kein Limit gesetzt ist.

Parameter

Name Typ Default Beschreibung
$resource int POSIX_RLIMIT_ALL Eine der POSIX_RLIMIT_*-Konstanten, die angibt, welche Ressource abgefragt werden soll. Mögliche Werte sind u. a. POSIX_RLIMIT_CORE, POSIX_RLIMIT_CPU, POSIX_RLIMIT_DATA, POSIX_RLIMIT_FSIZE, POSIX_RLIMIT_LOCKS, POSIX_RLIMIT_MEMLOCK, POSIX_RLIMIT_MSGQUEUE, POSIX_RLIMIT_NICE, POSIX_RLIMIT_NOFILE, POSIX_RLIMIT_NPROC, POSIX_RLIMIT_RSS, POSIX_RLIMIT_RTPRIO, POSIX_RLIMIT_RTTIME, POSIX_RLIMIT_SIGPENDING, POSIX_RLIMIT_STACK und POSIX_RLIMIT_AS. Wird POSIX_RLIMIT_ALL (ab PHP 8.3) übergeben oder der Parameter weggelassen, werden alle Ressourcen zurückgegeben.

Rückgabewert

Typ
array|false
Beschreibung

Bei Erfolg wird ein assoziatives Array zurückgegeben. Wird eine einzelne Ressource abgefragt, enthält das Array die Schlüssel soft limit und hard limit mit den jeweiligen numerischen Werten. Bei Übergabe von POSIX_RLIMIT_ALL ist das Array nach Ressourcennamen indiziert, wobei jeder Eintrag wiederum soft limit und hard limit enthält. Ein Wert von POSIX_RLIMIT_INFINITY steht für unbegrenzt. Im Fehlerfall wird false zurückgegeben.

Beispiele

Maximale Anzahl offener Dateideskriptoren abfragen

<?php
// Abfragen des Limits für offene Dateideskriptoren
$limit = posix_getrlimit(POSIX_RLIMIT_NOFILE);

if ($limit === false) {
    echo 'Fehler: ' . posix_strerror(posix_get_last_error()) . PHP_EOL;
} else {
    echo 'Soft-Limit (offene Dateien): ' . $limit['soft limit'] . PHP_EOL;
    echo 'Hard-Limit (offene Dateien): ' . $limit['hard limit'] . PHP_EOL;
}
Soft-Limit (offene Dateien): 1024 Hard-Limit (offene Dateien): 4096

Alle Ressourcen-Limits auf einmal auflisten (PHP 8.3+)

<?php
// PHP 8.3+: POSIX_RLIMIT_ALL abfragen
$limits = posix_getrlimit();

if ($limits === false) {
    echo 'Fehler beim Abrufen der Limits.' . PHP_EOL;
    exit(1);
}

foreach ($limits as $resource => $values) {
    $soft = ($values['soft limit'] === POSIX_RLIMIT_INFINITY) ? 'unbegrenzt' : $values['soft limit'];
    $hard = ($values['hard limit'] === POSIX_RLIMIT_INFINITY) ? 'unbegrenzt' : $values['hard limit'];
    printf("%-20s  Soft: %-12s  Hard: %s\n", $resource, $soft, $hard);
}
core Soft: 0 Hard: unbegrenzt cpu Soft: unbegrenzt Hard: unbegrenzt ...

Prüfen ob genug Dateideskriptoren für eine Server-Anwendung verfügbar sind

<?php
const REQUIRED_FDS = 512;

$limit = posix_getrlimit(POSIX_RLIMIT_NOFILE);

if ($limit === false) {
    throw new RuntimeException('Ressourcen-Limit konnte nicht gelesen werden.');
}

$soft = $limit['soft limit'];

if ($soft !== POSIX_RLIMIT_INFINITY && $soft < REQUIRED_FDS) {
    echo sprintf(
        'Warnung: Soft-Limit für Dateideskriptoren (%d) liegt unter dem benötigten Wert (%d).%s',
        $soft,
        REQUIRED_FDS,
        PHP_EOL
    );
} else {
    echo 'Ressourcen-Limit ausreichend.' . PHP_EOL;
}
Ressourcen-Limit ausreichend.

// Wichtig · Fallstricke

  • Die Funktion steht nur auf POSIX-kompatiblen Systemen zur Verfügung (Linux, macOS, BSD). Unter Windows ist sie nicht verfügbar.
  • Die PHP-POSIX-Erweiterung muss kompiliert oder als Shared Extension geladen sein (extension=posix). In vielen Distributions-Paketen ist sie standardmäßig aktiv.
  • Der Parameter POSIX_RLIMIT_ALL und das parameterlose Verhalten existieren erst ab PHP 8.3. In älteren Versionen muss immer explizit eine Ressourcen-Konstante übergeben werden.
  • Nicht alle Ressourcen-Konstanten sind auf jedem Betriebssystem verfügbar; manche (z. B. POSIX_RLIMIT_RTTIME) existieren nur unter Linux.
  • Um ein Limit zu verändern, kann posix_setrlimit() verwendet werden, sofern das neue Soft-Limit das Hard-Limit nicht überschreitet.