pcntl_fork()中超过300秒的最大执行时间

我有一些代理运行,经过几个星期的正常模式,突然我们得到:

Maximum execution time of 300 seconds exceeded

在一条线上

$this->pids[$next_child] = pcntl_fork();

我们也有:

 [root@a ~]# ulimit -u 385913 [root@a ~]# ps ax | wc -l 400 [root@a ~]# cat /proc/sys/kernel/pid_max 4194303 strace shows poll([{fd=4, events=POLLIN|POLLPRI|POLLHUP}], 1, 1000) = 0 (Timeout) 

我们在php5.4的centos,它可能是一个PHP的错误? 或者可能是错的?

Solutions Collecting From Web of "pcntl_fork()中超过300秒的最大执行时间"

这个错误有点神秘。 所以,我们必须做一些调试才能找到问题的根本。

注意:不要把注意力集中在pcntl_fork或者PHP的bug上。 我将专注于这是一个系统资源问题。 因为,它抛出的错误包含叉。 我们将看到它从那里去

  • 错误可能是一个错误或不重要。 要测试这个添加ini_set('MAX_EXECUTION_TIME', -1); 到脚本的最顶端。 如果脚本没有任何问题地运行,那么这是真的。 如果没有,那么我们应该检查行为。 如果您的代理商在服务时间周围出现问题,他们会正常抛出错误,这可能意味着错误意味着资源不足。 如果不是这种情况,您应该检查代理的行为,以便了解有关问题原因的更多信息。

  • 如果您从我所听到的内容中使用Active URL缓存,则该错误可能与Active URL缓存的大小有关。

如果问题仍然存在,则需要提供有关您的环境和配置的更多信息,以便我们可以为您提供帮助。

问题:你有没有机会使用Magento?

如果不知道代码的全部内容,就很难说清楚,但是我的第一个倾向是确保在脚本完成后正确地处理进程。 没有这一点,偷看使用可能会耗尽资源来处理新的过程,但由于它们的性质,“死亡”则有很大的不同。

确保你没有假设你正在用exit退出进程,试试posix_kill( $this->pids[ $next_child ], 15 );

您可以尝试使用sig 9而不是15,但我不建议在生产中使用它 – 但是它可能有助于调试问题。 其实,你可能会检查一个9,这可能是问题… posix_kill( $this->pids[ $next_child ], 9 ); 不会做任何清理。