PHP无法打开流:打开的文件太多

时间:2015-09-21 09:13:57

标签: php unix nginx

我遇到错误问题: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服务器发出大量请求时会出现问题。

3 个答案:

答案 0 :(得分:2)

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

最终,我认为你需要解决问题 - 如果确实是一个问题 - 打开的文件数量超出了你的预期。

答案 1 :(得分: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/

答案 2 :(得分:0)

解决方案是做流浪汉停止然后再流浪ssh。然后它打印出10000.看起来简单的注销和用户登录是不够的。