我创建了一个基准类,允许用户插入例如
$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}'");