【问题标题】:PHP / CentOS - failed to open stream: Too many open filesPHP / CentOS - 无法打开流:打开的文件太多
【发布时间】:2012-08-14 06:05:58
【问题描述】:

有点不清楚这是 PHP/Apache 问题还是文件系统问题。我正在编写一个脚本来检查我们的 LDAP 服务器的引用完整性,因此我正在提取大量数据。我正在使用 PHP 5.3.8、Apache 2.2.3 和 CentOS 5.7(我认为这是正确的版本)

当我运行脚本时,我收到一条 PHP 警告:

警告:include("fileName"):无法打开流:第 50 行的“fileName”中打开的文件太多警告:include():无法打开“fileName”以包含(include_path='.:/ usr/local/zend/share/ZendFramework/library:/usr/local/zend/share/pear') 在第 50 行的 "fileName" 中

我已经删减了很多代码以包含更少的文件,但这似乎并没有什么不同。我认为这可能是因为我提取了多少数据(可能是由于抖动)所以我限制了它并输出了 7.5 MB 的峰值内存使用量(在我限制了返回结果之后),这是一个不错的块但不是足以杀死脚本。

在这一切之中,我搜索了这个问题,发现它可能是由文件系统打开文件限制引起的,该限制可以通过一个名为 ulimit 的命令进行更改。默认值为 1024。我为所有用户将我的设置为 40000。仍然没有帮助。剥离后,我的 PHP 脚本总共使用了 11 个文件。我只是不明白为什么会这样。

有什么想法吗?

提前致谢,

约旦

【问题讨论】:

  • LDAP...您是否在遍历树时执行包含此文件的递归调用?
  • 不,每个文件只包含一次。在我开始研究 LDAP 之后,我什么都不包括。
  • 我应该提一下,如果我从中取出 LDAP 查询,它可以正常工作。

标签: php apache filesystems centos


【解决方案1】:

您是否修改了该用户的软限制和硬限制?此外,如果这是在用户说“apache_user”下运行的 Apache 进程,您将需要停止 Apache,注销,重新登录(确保软/硬限制都到位)并启动 Apache 进程。

【讨论】:

  • 我为所有用户修改了它并重新启动了整个服务器。
  • 我将硬限制和软限制的限制从 1024 提高到 40000。
  • 哇,奇怪。你真的需要分解代码来尝试找出导致它的原因。
猜你喜欢
  • 2015-12-17
  • 2013-04-02
  • 2013-11-15
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多