PHP betik çalıştırma zamanı izleme

7 Cevap php

PHP belli bir senaryonun (max_execution_time sınırı zorlamak için) kullandığı CPU süreyi takip ediyor. Programın bu içine erişmek için bir yolu var mı? Ben çok CPU gerçek PHP (komut oturan ve veritabanı için beklerken zaman artırılır) yanmış olduğu konusunda benim testleri ile bazı günlük dahil etmek istiyorum.

Güncelle: Sadece açık bu bir Linux kutuyu olduğundan emin olmak istedim.

7 Cevap

: Unixoid sistemlerinde, sizin gibi, getrusage kullanabilirsiniz

// 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";

Her test için bir php örneği yumurtlama eğer bir fark hesaplamak gerekmez unutmayın.

Eğer ihtiyacınız olan tüm duvar saati zaman ise, yerine işlemci yürütme zamanı daha sonra bunu hesaplamak kolaydır:

//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 other wise seconds
$execution_time = ($time_end - $time_start)/60;

//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

Bu PHP gibi max_execution_time için kullanılmaz diskler veya veritabanları, gibi harici kaynaklar için bekleyen oturdu olduğunu zaman dahil olacağını unutmayın.

Ben xdebug bakmak gerektiğini düşünüyorum. Profilleme seçenekleri çok süreç öğeleri ilgili bilerek doğru bir başlangıç ​​verecektir.

http://www.xdebug.org/

Developerfusion.com de Gringod bu iyi bir cevap verir:

<!-- put this at the top of the page --> 
<?php 
   $mtime = microtime(); 
   $mtime = explode(" ",$mtime); 
   $mtime = $mtime[1] + $mtime[0]; 
   $starttime = $mtime; 
;?> 

<!-- put other code and html in here -->


<!-- put this code at the bottom of the page -->
<?php 
   $mtime = microtime(); 
   $mtime = explode(" ",$mtime); 
   $mtime = $mtime[1] + $mtime[0]; 
   $endtime = $mtime; 
   $totaltime = ($endtime - $starttime); 
   echo "This page was created in ".$totaltime." seconds"; 
;?>

Dan (http://www.developerfusion.com/code/2058/determine-execution-time-in-php/)

Talal7860 cevabı daha kısa versiyonu

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

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

Işaret ettiği gibi, bu değil 'cpu zamanı' wallclock zamanı 'olduğunu

Bunu yapmak için en ucuz ve kirli bir şekilde sadece microtime() Eğer kriter istediğiniz kod yerlerde aramaları olun. Hemen önce ve hemen veritabanı sorgularının ardından bunu yapmak ve bu komut yürütme zamanı geri kalanından bu sürelerini kaldırmak için basit.

Bir ipucu: PHP yürütme zamanı nadiren komut dosyası zaman aşımı kılan şey olacak. Hemen hemen her zaman bir dış kaynak için bir çağrı olacak bir komut dosyası zaman aşımına eğer.

PHP microtime documentation: http://us.php.net/microtime

Ben kutudan kullanabilirsiniz phihag cevap üzerinden bir ExecutionTime sınıfı oluşturuldu:

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";
     }
 }

kullanımı:

$executionTime = new ExecutionTime();
$executionTime->Start();
// code
$executionTime->End();
echo $executionTime;