【问题标题】:PHP web application throwing "Too many open files"PHP Web 应用程序抛出“打开的文件太多”
【发布时间】:2012-11-03 18:14:09
【问题描述】:

我有一个 Web 应用程序,它使用 php 的本机函数来写入文件,例如fopen(), fwrite() 在进程结束时写入文件后,我通过执行fclose() 关闭文件句柄。

Web 应用程序还在某些地方使用exec()shell_exec() 来执行外部程序。

此 Web 应用程序主要部署在 Linux 服务器上。最近在生产服务器上,我们注意到它无法写入文件并抛出此错误的问题:

“打开的文件太多”

所以我的问题是:执行上述操作(文件写入和通过 PHP 执行外部命令)是否可能导致此问题并打开了太多打开的文件,我现在收到此错误?

我确保在打开文件句柄进行写入/读取时,我会关闭它们。

【问题讨论】:

    标签: php apache exec fopen shell-exec


    【解决方案1】:

    有可能吗?当然。甚至有可能,因为 ulimit 是每个进程的限制。

    也许有一个流程问题使您的 fclose 代码无法运行(例如异常,还是 else 块?)。

    做一些调试。甚至像在 fopen() 上增加一个计数器并在 fclose() 上减少它这样的基本操作也会说明这一点。

    【讨论】:

    • 检查了代码并确保fclose 没有放在任何条件语句下,并且总是在运行fopen 后被调用。现在进一步调试应用程序以确保它也按预期执行。
    【解决方案2】:

    这是因为您超出了默认打开文件数。您可以使用ulimit 增加打开文件的最大数量。详情请查看this

    【讨论】:

    • 修复原因而不是症状
    • 是的。修复代码会更有帮助,就像没有修复一样,将来也会产生问题。
    • 我最近不得不打开 2000 多个文件并遇到同样的问题,所以提出了相同的解决方案。但我同意你的看法,只有在需要时才应该这样做。
    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 2011-11-01
    • 2020-09-21
    • 2012-09-09
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多