cpu_get_usage в php? - PullRequest
       46

cpu_get_usage в php?

6 голосов
/ 07 декабря 2011

Я создал эталонный класс, который позволяет пользователю вставлять, например,

$timer->checkpoint('1');

, чтобы проверить некоторый код на время, потребление памяти и т. Д. И в конце кода, еслион / он хочет проверить это, он / он должен вставить

$result=$timer->result();

, который выдает некоторые данные для результата публичной функции (), например, использование памяти (используя memory_get_peak_usage) и потребление времени (microtime ()).

Все это прекрасно работает для меня.

Но как я могу использовать комбинацию существующих встроенных функций php, чтобы получить значение, которое можно считать потреблением процессора ?

Было довольно легко подсчитать, сколько времени было потрачено на определенный кусок кода, используя встроенные функции, но у меня были проблемы с поиском способа, как получить потребление ЦП дляопределенный кусок кода.

Ответы [ 3 ]

5 голосов
/ 12 декабря 2011

Ненавижу отвечать на свой вопрос, но я провел много исследований, и вот я здесь ... В основном то, что я сделал, было это ...

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

Как видите, я использовал встроенную функцию getrusage php. Который выдает массив с целой кучей информации, из которых большинство было довольно бесполезным для меня, за исключением ru_utime.tv_usec (время пользователя) и ru_stime.tv_usec (системное время). Чтобы увидеть, сколько ресурсов процессора потребляет скрипт, нам нужно взглянуть на значения «пользовательское время» и «системное время» и, как вы можете видеть в коде, добавить его, чтобы получить время, которое фактически является использованием процессора.

0 голосов
/ 11 апреля 2018

А как насчет ..?

$pid = getmypid();
$cpu = exec("ps hup $pid|awk '{print $3}'");
0 голосов
/ 26 августа 2017
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;
}

Использование:

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

В простых случаях это дает то же самое, что и microtime, но с меньшей точностью.Та же функция для microtime:

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

Грубый, не использовать, как это:

stopwatch();
f(); // some function, which calls `stopwatch` in itself too
echo stopwatch();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...