PHP 无法打开流:打开的文件太多
PHP failed to open stream: Too many open files
我遇到错误问题:PHP无法打开流:打开的文件太多。
我在 Whosebug 上查看了各种答案,但我无法解决这个问题。我主要尝试增加最大值的限制。打开文件:
我编辑了 /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
在此之后一切又恢复正常了。问题主要发生在我 运行 单元测试、行为测试或当我向网络服务器发出大量请求时。
听起来像是一个很长的 运行 过程正在打开文件但没有正确关闭它们。你知道哪个过程可能会这样做吗?您正在做一些您希望打开大量文件的事情吗?听起来这可能是您的单元测试库的问题。我不熟悉行为;您是否专门针对您正在使用的 libraries/software 搜索了此错误?当您谈论 "making a lot of request to the web server" 时,是否都是 'concurrent' 请求,这很可能导致打开大量文件句柄?
最终,我认为您需要解决打开比预期更多文件的问题 - 如果它确实是一个问题。
您应该增加用户 运行 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/
解决方案是执行 vagrant halt,然后再次执行 vagrant ssh。然后它打印出 10000。由于某种原因,看起来简单的注销和用户登录是不够的。
我遇到错误问题:PHP无法打开流:打开的文件太多。
我在 Whosebug 上查看了各种答案,但我无法解决这个问题。我主要尝试增加最大值的限制。打开文件:
我编辑了 /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
在此之后一切又恢复正常了。问题主要发生在我 运行 单元测试、行为测试或当我向网络服务器发出大量请求时。
听起来像是一个很长的 运行 过程正在打开文件但没有正确关闭它们。你知道哪个过程可能会这样做吗?您正在做一些您希望打开大量文件的事情吗?听起来这可能是您的单元测试库的问题。我不熟悉行为;您是否专门针对您正在使用的 libraries/software 搜索了此错误?当您谈论 "making a lot of request to the web server" 时,是否都是 'concurrent' 请求,这很可能导致打开大量文件句柄?
最终,我认为您需要解决打开比预期更多文件的问题 - 如果它确实是一个问题。
您应该增加用户 运行 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/
解决方案是执行 vagrant halt,然后再次执行 vagrant ssh。然后它打印出 10000。由于某种原因,看起来简单的注销和用户登录是不够的。