在PHP中,如何衡量请求花在使用硬盘上的时间?

时间:2014-12-16 11:24:13

标签: php c linux windows ubuntu

有没有办法衡量网络请求花费的时间({3}}的数量/时间长度?

由此,我指的是当前线程(或它的授权)花费在使用硬件上的实际时间量。

至于测量 CPU时间,它有一个函数doing I/O

<?php

$a = getrusage();
f();
$b = getrusage();

$sec = ($b['ru_utime.tv_sec'] - $a['ru_utime.tv_sec']) + ($b['ru_stime.tv_sec'] - $a['ru_stime.tv_sec']);
echo 'It took ~' . $sec . 's of CPU time.';

function f(){
    for($x=0;$x<120000000;++$x){
        // busy loop
    }
}

是否有测量I / O的功能?

所述功能的示例用法:

<?php

$credits_remaining = 8500;

$a = Time_Spent_On_Hard_Disk_So_Far();
Get_File_From_Hard_Disk($credits_remaining); // limit request to $credits_remaining number of seconds
$b = Time_Spent_On_Hard_Disk_So_Far();
$time_spent = $b - $a;

echo "Time spent on hard disk: ", $time_spent;
$credits_remaining -= $time_spent;

(一个 C 解决方案没问题,只要我们可以从PHP调用它而不会遇到严重的开销。)

1 个答案:

答案 0 :(得分:0)

在你的特定情况下,我会在你开始你的操作之前得到一个microtime [stamp],与另一个microtime [stamp]做差异,将结果存储在一个数组中,该数组包含解释指标所指的内容的元数据to,最后将该信息存储在数据存储,SOMEWHERE(数据库,txt文件,会话等)中。

最有可能是跟踪此类信息的最佳(最简单)方法,并让您的代码在多种操作环境中保持可移植性。

/**
 *  Get Micro Time
 *
 *  Returns the current (epoch) time with micro seconds.
 *
 *  @param [in] $elapsed %REF% of difference since last execution
 *  @return | FLOAT time with micro seconds from epoch
 */
function microtime(&$elapsed = null) {

    static $previous = null;

    list($micro, $epoch) = explode(" ", microtime());

    $now = round(floatval($epoch.substr($micro, 1)), 3);

    if ($previous) {
        $elapsed = round($now - $previous,3);
    }

    $previous = $now;

    return $now;

}