Translate: 
EnglishFrenchGermanItalianPolishPortugueseRussianSpanish

Jak obliczyć bieżące zużycie CPU przez skrypt PHP?

Istnieje wiele skryptów obliczających czas wykonywania programu, jego zużycie pamięci, a nawet ilość zapytań wysłanych do baz danych.

Wszystkie wymienione przeze mnie wskaźniki są niezwykle istotne podczas testowania kodu w celu jego późniejszej optymalizacji. Mi jednak brakuje jeszcze jednego parametru: procentowego zużycia CPU przez skrypt PHP!

Jak zbadać zużycie CPU?

W większości przypadków jest to bardzo proste. Wystarczy posłużyć się wbudowaną w PHP funkcją getrusage(). Oto program obliczający zużycie procesora:

<?php
 
function onRequestStart() {
	$dat = getrusage();
	define('PHP_TUSAGE', microtime(true));
	define('PHP_RUSAGE', $dat["ru_utime.tv_sec"]*1e6+$dat["ru_utime.tv_usec"]);
}
 
function getCpuUsage() {
    $dat = getrusage();
    $dat["ru_utime.tv_usec"] = ($dat["ru_utime.tv_sec"]*1e6 + $dat["ru_utime.tv_usec"]) - PHP_RUSAGE;
    $time = (microtime(true) - PHP_TUSAGE) * 1000000;
 
    // cpu per request
    if($time > 0) {
        $cpu = sprintf("%01.2f", ($dat["ru_utime.tv_usec"] / $time) * 100);
    } else {
        $cpu = '0.00';
    }
 
    return $cpu;
}
 
?>

Instrukcja obsługi tego skryptu jest dosyć prosta. Podczas startu dowolnej aplikacji PHP należy wywołać funkcję onRequestStart().W celu pobrania informacji o procentowym zużyciu CPU wystarczy w dowolnym momencie (a najlepiej pod koniec skryptu) posłużyć się funkcją getCpuUsage():

<?php
require("cpu_usage.php");
 
onRequestStart();
 
for($i = 0; $i < 100000; ++$i) {
   $j = $i % 2;
}
 
echo "CPU USAGE ".getCpuUsage()."%\n";

Uwagi końcowe

Jak już wspomniałem mechanizm ten działa w większości przypadków. Niechlubnym wyjątkiem jest oczywiście system Windows, dla którego funkcja ta nie została zaimplementowana. Podczas używania skryptu w mieszanych środowiskach (Windows/Linux) warto przewidzieć ten scenariusz i pomijać sprawdzanie CPU, gdy okaże się to konieczne.

Dodaj odpowiedź