“最大执行时间”这个短语有歧义:它可能意味着(a)脚本启动后经过的时间,或者(b)脚本所需的总CPU时间(包括或不包括操作系统调用所需的CPU时间)。
在这里kuba的非常有趣的帖子Real max_execution_time for PHP on linux发现这取决于PHP是否在Unix或Windows上运行。他实质上发现在Unix上是(b),而在Windows或Cygwin上是(a)。
但是,我的服务器是Linux 2.6.32-358.18.1.el6.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux,并且我有一个cron作业,在经过30秒的时间后被终止,尽管它的CPU时间少于16秒:
有人能进一步解释吗?
在这里kuba的非常有趣的帖子Real max_execution_time for PHP on linux发现这取决于PHP是否在Unix或Windows上运行。他实质上发现在Unix上是(b),而在Windows或Cygwin上是(a)。
但是,我的服务器是Linux 2.6.32-358.18.1.el6.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux,并且我有一个cron作业,在经过30秒的时间后被终止,尽管它的CPU时间少于16秒:
[Tuesday, 10-Dec-2013 10:22:33 GMT] Begin, cputime=0 secs.
[Tuesday, 10-Dec-2013 10:22:58 GMT] starting zip_close, cputime=10.12946 secs.
[10-Dec-2013 10:23:03 UTC] PHP Fatal error: Maximum execution time of 30 seconds exceeded in xxx.php on line 149
这与kuba的发现相矛盾。我的是PHP 5.3.26,我使用以下方法来测量CPU时间:
function cputime() {
$data = getrusage();
return $data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000;
有人能进一步解释吗?
getrusage
将根据您在脚本中实际执行的操作而有所不同。你没有确定一个边缘情况,你只是测量方式错误了。Kuba说脚本应该运行“30秒加上任何非 PHP 时间”。您的日志显示您的脚本从 10:22:33 运行到 10:23:03,正好是 30 秒。因此,假设您没有执行任何system
或流调用,他的说法是 100% 正确的。 - Niels Keurentjes