cpu_get_usage in php?



我创建了一个基准类,允许用户插入例如

$timer->checkpoint('1');

检查一些代码的时间,内存消耗等....在代码的末尾,如果她/他想测试它,她/他必须插入

$result=$timer->result();

这会向公共函数 result(( 提供一些数据,例如内存使用(使用 memory_get_peak_usage(和时间消耗(microtime(((。

这一切对我来说都很好。

但是,如何使用现有内置 php 函数的组合来获取可被视为 CPU 消耗的值呢?

使用内置函数计算在某段代码上花费了多少时间非常容易,但是我一直很难想到如何获取某段代码的CPU消耗。

讨厌回答我自己的问题,但我做了很多研究,在这里我去...基本上我所做的是这个...

        $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(系统时间(。要查看脚本消耗了多少 CPU 功率,我们需要查看"用户时间"和"系统时间"值,正如您在代码中看到的那样,将其添加以获取实际上是 CPU 使用率的时间。

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()." elapsedn";
// doing yet some stuff here
echo cpu_time()." elapsedn";

在简单的情况下,它给出相同的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();

怎么样..?

$pid = getmypid();
$cpu = exec("ps hup $pid|awk '{print $3}'");

相关内容

  • 没有找到相关文章

最新更新