2011-12-07 4 views
6

He creado una clase de punto de referencia que permite al usuario insertar, por ejemplo,cpu_get_usage en php?

$timer->checkpoint('1'); 

hasta la salida un código de tiempo, el consumo de memoria y tal .... y al final del código si él/ella quiere probarlo él/ella tiene que insertar

$result=$timer->result(); 

esto da algunos datos para el resultado de la función pública() como por ejemplo uso de memoria (usando memory_get_peak_usage) y consumo de tiempo (microtime()).

Todo esto funciona bien para mí.

Pero, ¿cómo puedo utilizar la combinación de las funciones de php existentes incorporadas en obtener un valor que se puede considerar un consumo de CPU?

Ha sido bastante fácil calcular cuánto tiempo se ha gastado en un determinado código con las funciones incorporadas, pero he tenido problemas para pensar cómo obtener el consumo de CPU para un cierto pieza de código.

+0

¿Esto ayuda? http://stackoverflow.com/questions/4705759/how-to-get-cpu-usage-and-ram-usage-without-exec –

+0

No realmente. Investigué a través de SO y busqué en Google, y creo que encontré una solución ... Lo estoy construyendo ahora mismo y cuando termine voy a publicar lo que he tratado de hacer. Estoy usando esta función php con la esperanza de que funcione - getrusage –

+0

ru_utime- Un campo struct timeval que contiene la cantidad de tiempo del usuario, en segundos, que el proceso ha utilizado. El tiempo de usuario es el tiempo de CPU dedicado a la ejecución del programa de usuario, en lugar de las llamadas al sistema del kernel. ru_stime- Un campo struct timeval que contiene la cantidad de tiempo del sistema, en segundos, que el proceso ha utilizado. El tiempo del sistema es el tiempo de CPU dedicado a ejecutar llamadas al sistema en nombre del proceso. Estos son los dos valores que obtiene de una matriz en una función getrusage() (PHP incorporado). Básicamente, debe dividir la hora del sistema con la hora del usuario para obtener el consumo del procesador en ese momento. –

Respuesta

5

odio a responder a mi propia pregunta, pero me hicieron un gran trabajo de investigación, y aquí voy ... Básicamente lo que hice fue esto ...

 $dat=getrusage(); 
     foreach ($dat as $key => $val) { 
      $usertime= $dat['ru_utime.tv_usec']; 
      $systemtime= $dat['ru_stime.tv_usec']; 
      $finalresultcpu= ($systemtime + $usertime); 
     } 
     $this->_cpuTrackers[$name]=$finalresultcpu; 
     return $this; 
               } 

Como se puede ver que no se le getrusage php función incorporada. Lo que da una matriz con un montón de información, de la cual la mayoría me resultó bastante inútil, excepto ru_utime.tv_usec (hora del usuario) y ru_stime.tv_usec (hora del sistema). Para ver cuánta potencia de CPU ha consumido la secuencia de comandos, tenemos que mirar los valores de "tiempo de usuario" y "tiempo de sistema" y, como puede ver en el código, agréguelo para obtener el tiempo que de hecho es un uso de CPU.

+1

Es perfectamente legítimo responder a su propia pregunta _y_ aceptarla. [Incluso hay una insignia para ello] (http://stackoverflow.com/badges/14/self-learner). :) – Herbert

+0

Gracias Herbert ...es agradable recibir un golpe en la parte posterior de vez en cuando :-D. Es especialmente halagador obtener uno de un experto como usted –

+0

* persona conocedora :-) –

0
function cpu_usage(){ 
    static $R=0; 
    $r=$R; 
    $R=getrusage(); 
    $R= $R['ru_utime.tv_sec']*1000000+$R['ru_utime.tv_usec']+ 
     $R['ru_stime.tv_sec']*1000000+$R['ru_stime.tv_usec']; 
    return $R-$r; 
} 

Uso:

cpu_time(); // optionally initiating, to measure time from this point, 
      // not from the script's beginning 
// doing some stuff here 
echo cpu_time()." elapsed\n"; 
// doing yet some stuff here 
echo cpu_time()." elapsed\n"; 

En casos sencillos que le da lo mismo, como microtime, pero con menos precisión. la misma función para microtime:

function stopwatch(){ 
    static $time=0; 
    $prev=$time; 
    $time=microtime(true); 
    return $time-$prev; 
} 

De grueso, a no utilizar la siguiente manera:

stopwatch(); 
f(); // some function, which calls `stopwatch` in itself too 
echo stopwatch();