PHP max_execution_time的确切含义

时间:2013-12-10 11:27:41

标签: php unix time max execution

短语“最长执行时间”是不明确的:它可能意味着(a)自脚本启动以来经过的时间,或(b)脚本占用的总cputime(包括或排除操作系统调用所占用的cputime)

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

这与库巴的发现相矛盾。我的是PHP 5.3.26和IU'm测量cpu时间:

function cputime() {
    $data = getrusage();
    return $data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000;

任何人都可以进一步澄清吗?

3 个答案:

答案 0 :(得分:5)

这完全取决于您的脚本。 getrusage不是衡量它的可靠方法。您在3种测量方法之间感到困惑,而不是2:

  1. 自脚本启动以来的绝对时间
  2. 脚本的运行时,所以1.减去系统调用
  3. CPU忙的实际时间,因此2.由于等待状态等而减去其他空闲时间
  4. getrusage措施3,而不是记录的内容。因此,您看到了相互矛盾的结果 - 显然您的脚本有14秒的常规等待状态和其他非活动时段,没有实际上完全像您使用system或流操作一样产生。< / p>

    由于PHP文档状态Windows使用方法1,而* nix系统使用方法2.没有人使用3,因为它作为超时并不真正有意义 - 这意味着当系统负载很高时超时会变得极其紧张等待状态上升。

答案 1 :(得分:0)

查看文档:

http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time

程序员如何决定实施这个要求显然是另一个故事:) 这是底层操作系统非常重要的案例之一。有关特定操作系统上的CPU时间的可用API将清楚地阐明问题。

这个高级要求(脚本运行时间)它是不明确的,并且可以由OS以许多不同的方式解释。证据就是你得到的不同时间。

所以有很多“正确答案”,每个操作系统只有一个......

答案 2 :(得分:0)

AFAIK它依赖于操作系统。根据操作系统,执行shell exec或查询所花费的时间(例如windows)或wont(例如linux)将包含在max_execution_time的内容中。