PHP Web应用程序抛出“太多打开的文件”

时间:2012-11-15 06:30:25

标签: php apache exec fopen shell-exec

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

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

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

  

“打开的文件过多”

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

可能存在一个流程问题,导致fclose代码无法运行(例如异常或其他阻止?)。

做一些调试。甚至一些基本的东西,比如在fopen()上递增一个计数器并在fclose()上递减它就会说明。