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
在不了解代码整体的情况下很难准确地说...但我的第一个倾向是确保脚本完成后正确地终止进程。如果没有这一点,peek 的使用可能会耗尽资源来处理新进程,但由于其性质,“死亡”非常不同。
确保您没有假设您要通过退出来终止进程,请尝试
posix_kill( $this->pids[ $next_child ], 15 );
您可以尝试使用 sig 9 而不是 15,但我不建议在生产中使用它 - 但它可能有助于调试问题。实际上,您可能会检查 9,这可能就是问题所在...... posix_kill( $this->pids[ $next_child ], 9 );不会进行任何清理。