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

2cmtqfgy  于 5个月前  发布在  Unix
关注(0)|答案(3)|浏览(48)

我有一个问题的错误:PHP无法打开流:太多打开的文件。
我在stackoverflow上看过各种答案,但我无法解决这个问题。我主要是试图增加max. open文件的限制:
我已经编辑了/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服务器发出大量请求时。

hsvhsicv

hsvhsicv1#

听起来像是一个长时间运行的进程正在打开文件,但没有正确关闭它们。您知道是哪个进程在这样做吗?您是否正在做一些您希望打开大量文件的事情?听起来像是您的单元测试库的问题。我不熟悉贝哈特;您是否专门针对您正在使用的库/软件搜索过此错误?当你谈到“向Web服务器发出大量请求”时,这些请求是否都是“并发”请求,这可能会导致打开大量文件句柄?
最终,我认为您需要解决打开的文件比您预期的要多的问题(如果这确实是一个问题的话)。

eivgtgni

eivgtgni2#

你应该增加每个用户的文件限制为用户运行的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/

8zzbczxx

8zzbczxx3#

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

相关问题