【发布时间】:2014-07-05 17:25:29
【问题描述】:
我有一些代理正在运行,经过几周的正常模式,我们突然得到:
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 的 bug?或者有什么问题?
更新
2年后仍然出现此错误,从那时起我们升级到php5.6,然后升级到php7,现在升级到php7.3.1
【问题讨论】:
-
检查你的顶级进程,有什么问题吗?
-
不,没有挂起,负载在 0.1
-
这绝对不像是 PHP 错误。
pcntl_fork()直接使用 fork(2) 系统调用。我不知道 fork() 系统调用实现,但看起来 poll() 被调用以等待循环中成功创建进程。现在只是推测...您必须查看 Linux 源代码才能准确了解此处发生的情况,以便 strace 可以为您提供更多帮助... -
@bwoebi 我们在 php5.3 上没有这个问题,一旦我们升级到 php5.4,我们每周都会有这个问题。
-
@Pentium10 好吧,还有其他一些虚假的东西,但不是 pnctl_fork() 调用。自 PHP 4 以来,它的实现没有改变。所以:您在此处描述的内容不足以解决您的问题。