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

Pen*_*m10 5 php linux centos process

我有一些代理正在运行,经过几周的正常模式后,我们突然得到:

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)
Run Code Online (Sandbox Code Playgroud)

我们在php5.4 centos上,它可能是一个PHP bug吗?或者什么可能是错的?
更新 2年后仍然有这个错误,从那时起我们升级到php5.6然后到php7,现在到php7.3.1

Bra*_*ley 0

在不了解代码整体的情况下很难准确地说...但我的第一个倾向是确保脚本完成后正确地终止进程。如果没有这一点,peek 的使用可能会耗尽资源来处理新进程,但由于其性质,“死亡”非常不同。

确保您没有假设您要通过退出来终止进程,请尝试 posix_kill( $this->pids[ $next_child ], 15 );

您可以尝试使用 sig 9 而不是 15,但我不建议在生产中使用它 - 但它可能有助于调试问题。实际上,您可能会检查 9,这可能就是问题所在...... posix_kill( $this->pids[ $next_child ], 9 );不会进行任何清理。