我正在尝试确定
PHP脚本的CPU使用率.我刚刚找到
this article,详细说明了如何查找系统和用户CPU使用时间(第4节).
但是,当我尝试这些例子时,我收到了完全不同的结果.
第一个例子:
sleep(3);
$data = getrusage();
echo "User time: ".
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
结果是:
User time: 29.53
System time: 2.71
例2:
for($i=0;$i<10000000;$i++) {
}
// Same echo statements
结果:
User time: 16.69
System time: 2.1
例3:
$start = microtime(true);
while(microtime(true) - $start < 3) {
}
// Same echo statements
结果:
User time: 34.94
System time: 3.14
显然,除了第三个例子中的系统时间之外,没有一个信息是正确的.那么我做错了什么?我真的希望能够使用这些信息,但它需要可靠.
我正在使用Ubuntu Server 8.04 LTS(32位),这是php -v的输出:
PHP 5.2.4-2ubuntu5.10 with Suhosin-Patch 0.9.6.2 (cli) (built: Jan 6 2010 22:01:14)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
最佳答案 您可以使用系统’time’命令从外部验证此信息:
/usr/bin/time php script.php
这将打印如下:
0.03user 0.00system 0:03.04elapsed 0%CPU (0avgtext+0avgdata 32752maxresident)k
0inputs+0outputs (0major+2234minor)pagefaults 0swaps
当然,不要忘记getrusage()信息是使用的CPU时间,microtime()是挂钟时间.该程序可能会根据墙上的时钟运行10分钟,但内部可能只使用几秒钟的CPU时间.然后,在系统上运行的所有后台程序,资源争用以及常规内务处理争夺CPU时间.
能够在如此短的时间内获得准确的时间安排涉及太多因素.做了三次运行while(microtime())版本的循环,我得到了以下时间:
user:0.98,0.09,0.90
sys:0.12,0.05,0.94
显然差异很大.即使只是一个简单的<? print_r(getrusage())?> utime / stimes的范围从0到0.03.
尝试运行您的循环更长时间,并在其中执行一些操作以增加CPU使用率.现在你的数字太小而无法准确测量.