2011-12-07 13 views
6

Stworzyłem referencyjną klasę, która pozwala użytkownikowi wstawić npcpu_get_usage w php?

$timer->checkpoint('1'); 

sprawdzić jakiś kod na czas, zużycie pamięci i takie .... i na końcu kodu jeśli ona/on chce przetestować to musi on wstawić

$result=$timer->result(); 

daje to niektóre dane do publicznego wyniku funkcji() jak np. użycie pamięci (użycie memory_get_peak_usage) i zużycie czasu (microtime()).

To wszystko działa dobrze dla mnie.

Ale jak mogę wykorzystać połączenie wbudowanych funkcji php do uzyskać wartość, która może być uważana za zużycie procesora?

Łatwo było obliczyć, ile czasu zostało poświęcone na pewien fragment kodu za pomocą wbudowanych funkcji, ale miałem problem z myśleniem o tym, jak uzyskać zużycie procesora dla określonego kawałek kodu.

+0

Czy to pomoże? http://stackoverflow.com/questions/4705759/how-to-get-cpu-usage-and-ram-usage-without-exec –

+0

Niezupełnie. Mam zbadane przez SO i googled dużo i myślę, że przyszedłem do rozwiązania ... Buduję to teraz i kiedy skończę zamierzam posłać to, co próbowałem zrobić. Używam tej funkcji php w nadziei, że to zadziała - getrusage –

+0

ru_utime- Pole struct timeval zawierające ilość czasu użytkownika, w sekundach, którą proces wykorzystał. Czas użytkownika to czas CPU poświęcony na wykonywanie programu użytkownika, a nie na wywołania systemowe jądra. ru_stime- Pole struct timeval zawierające ilość czasu systemowego w sekundach, którą wykorzystał proces. Czas systemowy to czas procesora, w którym wykonywane są wywołania systemowe w imieniu procesu. Są to dwie wartości, które otrzymujesz z tablicy w funkcji getrusage() (wbudowany PHP). Zasadniczo musisz podzielić czas systemowy na czas użytkownika, aby uzyskać w tym momencie zużycie procesora. –

Odpowiedz

5

Nienawiść odpowiedzieć na moje własne pytanie, ale zrobiłem wiele badań, a tu idę ... zasadzie to, co zrobiłem, było to ...

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

Jak widać użyłem getrusage wbudowana funkcja php. Który daje tablicę z całą masą informacji, z których większość była dla mnie bezużyteczna, z wyjątkiem ru_utime.tv_usec (czas użytkownika) i ru_stime.tv_usec (czas systemowy). Aby zobaczyć, ile mocy procesora zużył skrypt, musimy spojrzeć na wartości "czasu użytkownika" i "czasu systemowego" i jak widać w kodzie, dodaj go, aby uzyskać czas, który jest w rzeczywistości wykorzystaniem procesora.

+1

Jest całkowicie uzasadnione, aby odpowiedzieć na własne pytanie _i zaakceptuj to. [Jest nawet znaczek na to] (http://stackoverflow.com/badges/14/self-learner). :) – Herbert

+0

Dzięki Herbert ...fajnie jest dotknąć z tyłu raz na jakiś czas :-D. To szczególnie pochlebne, aby zdobyć kogoś od znawcy takiego jak ty: –

+0

* kompetentna osoba :-) –

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

Zastosowanie:

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

W prostych przypadkach daje takie same, jak microtime, ale z mniejszą dokładnością. Ta sama funkcja microtime:

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

Z grubej, aby nie używać tak:

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