【问题标题】:PHP failed to open stream: Too many open filesPHP 无法打开流:打开的文件太多
【发布时间】:2015-12-17 22:17:40
【问题描述】:

我遇到了错误: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

在这之后事情再次起作用。主要是在我运行单元测试、行为测试或向 Web 服务器发出大量请求时出现问题。

【问题讨论】:

标签: php unix nginx


【解决方案1】:

听起来像是一个长时间运行的进程正在打开文件而不是正确关闭它们。你有什么想法可能是哪个进程这样做的吗?您是否正在做一些您希望打开大量文件的事情?听起来这可能是您的单元测试库的问题。我不熟悉 behat;您是否专门针对您正在使用的库/软件搜索了此错误?当您谈到“向网络服务器发出大量请求”时,这些都是“并发”请求吗,这很可能会导致打开大量文件句柄?

最终,我认为你需要解决这个问题——如果确实是一个问题——打开的文件比你预期的要多。

【讨论】:

    【解决方案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

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

    【讨论】:

    • 好的,我理解上面评论中提到的观点。我已经用链接作为参考编辑了我的答案。
    【解决方案3】:

    解决方案是执行 vagrant halt ,然后再次执行 vagrant ssh。然后它打印出 10000。由于某种原因,看起来简单的注销和用户登录是不够的。

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2013-04-02
      • 2013-11-15
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多