379 Stimmen

Verfolgung der Skriptausführungszeit in PHP

PHP muss die Menge an CPU-Zeit verfolgen, die ein bestimmtes Skript verbraucht hat, um das Limit max_execution_time durchzusetzen.

Gibt es eine Möglichkeit, innerhalb des Skripts Zugriff darauf zu erhalten? Ich möchte einige Protokollierung mit meinen Tests über wie viel CPU in der tatsächlichen PHP verbrannt wurde (die Zeit wird nicht erhöht, wenn das Skript sitzt und wartet auf die Datenbank).

Ich verwende einen Linux-Rechner.

715voto

talal7860 Punkte 6527

Wenn Sie nur die Wanduhrzeit und nicht die CPU-Ausführung benötigen

//place this before any script you want to calculate time
$time_start = microtime(true); 

//sample script
for($i=0; $i<1000; $i++){
 //do anything
}

$time_end = microtime(true);

//dividing with 60 will give the execution time in minutes otherwise seconds
$execution_time = ($time_end - $time_start)/60;

//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';
// if you get weird results, use number_format((float) $execution_time, 10) 

N max_execution_time .

278voto

phihag Punkte 261131

Auf unixoiden Systemen (und in php 7+ auch auf Windows) können Sie trusage , wie:

// Script start
$rustart = getrusage();

// Code ...

// Script end
function rutime($ru, $rus, $index) {
    return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000))
     -  ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000));
}

$ru = getrusage();
echo "This process used " . rutime($ru, $rustart, "utime") .
    " ms for its computations\n";
echo "It spent " . rutime($ru, $rustart, "stime") .
    " ms in system calls\n";

Beachten Sie, dass Sie die Differenz nicht berechnen müssen, wenn Sie für jeden Test eine php-Instanz erzeugen.

151voto

C. Lee Punkte 3107

S

<?php
// At start of script
$time_start = microtime(true); 

// Anywhere else in the script
echo 'Total execution time in seconds: ' . (microtime(true) - $time_start);

A

47voto

Joyal Punkte 2397
<?php
// Randomize sleeping time
usleep(mt_rand(100, 10000));

// As of PHP 5.4.0, REQUEST_TIME_FLOAT is available in the $_SERVER superglobal array.
// It contains the timestamp of the start of the request with microsecond precision.
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

echo "Did nothing in $time seconds\n";
?>

35voto

Hamid Tavakoli Punkte 4377

I

class ExecutionTime
{
     private $startTime;
     private $endTime;

     public function start(){
         $this->startTime = getrusage();
     }

     public function end(){
         $this->endTime = getrusage();
     }

     private function runTime($ru, $rus, $index) {
         return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000))
     -  ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000));
     }    

     public function __toString(){
         return "This process used " . $this->runTime($this->endTime, $this->startTime, "utime") .
        " ms for its computations\nIt spent " . $this->runTime($this->endTime, $this->startTime, "stime") .
        " ms in system calls\n";
     }
 }

u

$executionTime = new ExecutionTime();
$executionTime->start();
// code
$executionTime->end();
echo $executionTime;

N

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X