Signatur
Beschreibung
getrusage() ruft Betriebssystem-Informationen über den Ressourcenverbrauch des aktuellen PHP-Prozesses ab. Die zurückgegebenen Werte stammen direkt vom Unix-Systemaufruf getrusage(2) und umfassen u. a. die verbrauchte CPU-Zeit (User- und Kernel-Modus), die Anzahl der Kontextwechsel sowie Paging-Informationen.
Typische Einsatzgebiete sind Performance-Messungen, Profiling von rechenintensiven Skripten und die Überwachung des Ressourcenverbrauchs in Produktionsumgebungen. Mit den Feldern ru_utime.tv_sec/ru_utime.tv_usec (User-CPU) und ru_stime.tv_sec/ru_stime.tv_usec (System-CPU) lässt sich die genaue CPU-Zeit berechnen.
Mit dem Parameter mode = 1 werden statt der eigenen Werte die Werte der Kind-Prozesse abgefragt. Auf Windows-Systemen werden nur die Felder ru_utime.tv_sec, ru_utime.tv_usec, ru_stime.tv_sec und ru_stime.tv_usec befüllt; alle anderen Felder enthalten 0.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mode | int | 0 | Steuert, welche Ressourcen abgefragt werden: 0 (Standard) = aktueller Prozess, 1 = Kind-Prozesse (RUSAGE_CHILDREN). Auf einigen Systemen ist zusätzlich 2 (RUSAGE_THREAD) verfügbar. |
Rückgabewert
ru_utime.tv_sec, ru_utime.tv_usec, ru_stime.tv_sec, ru_stime.tv_usec, ru_maxrss, ru_ixrss, ru_idrss, ru_minflt, ru_majflt, ru_nswap, ru_inblock, ru_oublock, ru_msgsnd, ru_msgrcv, ru_nsignals, ru_nvcsw, ru_nivcsw. Gibt false zurück, wenn ein Fehler auftritt.Beispiele
CPU-Zeit eines Skripts messen
<?php
$start = getrusage();
// Simulierte rechenintensive Aufgabe
$sum = 0;
for ($i = 0; $i < 5_000_000; $i++) {
$sum += $i;
}
$end = getrusage();
$userSec = ($end['ru_utime.tv_sec'] - $start['ru_utime.tv_sec'])
+ ($end['ru_utime.tv_usec'] - $start['ru_utime.tv_usec']) / 1_000_000;
$sysSec = ($end['ru_stime.tv_sec'] - $start['ru_stime.tv_sec'])
+ ($end['ru_stime.tv_usec'] - $start['ru_stime.tv_usec']) / 1_000_000;
printf("User-CPU: %.4f s\n", $userSec);
printf("System-CPU: %.4f s\n", $sysSec);
Alle verfügbaren Ressourcen-Felder ausgeben
<?php
$usage = getrusage();
foreach ($usage as $key => $value) {
printf("%-25s = %d\n", $key, $value);
}
Kind-Prozess-Ressourcen abfragen
<?php
// Kind-Prozess starten und warten
$pid = pcntl_fork();
if ($pid === 0) {
// Kind-Prozess: rechenintensiv
$s = 0;
for ($i = 0; $i < 1_000_000; $i++) { $s += $i; }
exit(0);
} else {
pcntl_wait($status); // auf Kind warten
$childUsage = getrusage(1); // RUSAGE_CHILDREN
printf("Kind User-CPU: %d.%06d s\n",
$childUsage['ru_utime.tv_sec'],
$childUsage['ru_utime.tv_usec']
);
}
// Wichtig · Fallstricke
Plattformabhängigkeit: Auf Windows werden die meisten Felder als 0 zurückgegeben; nur die vier Zeitfelder sind befüllt. Die genaue Bedeutung und Verfügbarkeit der Felder hängt vom Betriebssystem ab – konsultieren Sie im Zweifel die Manpage getrusage(2).
Einheit: Die ru_maxrss-Angabe ist auf Linux in Kilobytes, auf macOS/BSD in Bytes – Vorsicht beim plattformübergreifenden Einsatz.
getrusage() misst den kumulierten Verbrauch seit Prozessstart. Für präzise Laufzeitmessungen innerhalb eines Skripts empfiehlt sich die Differenzbildung zweier Aufrufe (siehe erstes Beispiel).