我有一个错误的问题:PHP无法打开流:太多打开的文件。
我已经在stackoverflow上查看了各种答案,但我无法解决这个问题。我主要是尝试提高max的极限。打开文件:
我已经编辑了/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服务器发出大量请求时。
听起来像是一个长时间运行的进程正在打开文件而没有正确关闭它们。你知道是哪个进程在起作用吗?您是否正在做一些您预计会打开大量文件的事情?听起来这可能是你的单元测试库的问题。我不熟悉什么;您是否搜索过与您正在使用的库/软件相关的此错误?当你谈到"向web服务器发出大量请求"时,这些请求是否都是"并发"请求,这可能会导致大量文件句柄被打开?
最后,我认为你需要解决这个问题——如果它确实是个问题的话——打开的文件比你预期的要多。
您应该为运行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/
解决方案是执行临时迁移,然后再次临时迁移ssh。然后它打印出10000。由于某些原因,简单的注销和用户登录似乎还不够。