PHP打开流失败:打开的文件过多

4

我遇到了一个问题,错误提示为:PHP无法打开流:文件打开太多。

我在stackoverflow上查看了各种答案,但是无法解决这个问题。我主要尝试了增加最大打开文件数的限制:

我编辑了/etc/security/limits.conf文件,并指定了如下内容:

*       soft    nofile      10000
*       hard    nofile      30000

保存并注销/重启后,运行以下命令:
ulimit -n

仍然会输出1024。我不确定为什么这没有效果,我认为这就是我得到PHP错误的原因。如果需要,我可以粘贴整个文件或任何其他配置文件。我使用的是PHP 5.6、nginx 1.8.0和php-fpm。
目前对我有效的解决方案是手动重启nginx:
service nginx restart

在此之后,一切都正常了。主要问题发生在我运行单元测试、behat测试或者向web服务器发送大量请求时。


请参阅 http://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user - Alex Chorry
3个回答

2
似乎是一个长时间运行的进程正在打开文件并没有正确关闭它们。你有任何想法哪个进程可能会这样做吗?你是否在做一些会期望打开大量文件的事情?听起来可能与你的单元测试库有关。我不熟悉behat;你是否已经在使用的库/软件方面特别搜索了这个错误?当你谈到“向Web服务器发出许多请求”时,它们都是“并发”的请求吗?这可能会导致打开大量文件句柄。
最终,我认为你需要解决打开比你预期的文件要多得多的问题,如果这确实是一个问题的话。

2
您应该增加运行 PHP 进程的用户的每个用户文件限制。检查您的 PHP 进程是以哪个用户身份运行的,并为他们增加限制。您可以像这样做。 $ cat /etc/security/limits.conf * hard nofile 500000 * soft nofile 500000 root hard nofile 500000 root soft nofile 500000 www-data hard nofile 500000 www-data soft nofile 500000

reference: https://rtcamp.com/tutorials/linux/increase-open-files-limit/


好的,我理解了上面评论中提到的要点。我已经编辑了我的答案,并附上了链接作为参考。 - Harshad Yeola
我必须按照参考链接中的所有步骤进行操作:https://rtcamp.com/tutorials/linux/increase-open-files-limit/,只是添加上述内容是不够的,才能使其正常工作。 - undefined

0
解决方案是执行 vagrant halt,然后再次执行 vagrant ssh。然后它就会打印出 10000。看起来,仅仅注销并重新登录用户并不足以解决某些问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接