Apache PHP/OSX Mavericks: - 无法打开流:打开的文件过多

Cod*_*oet 21 php apache macos yii

我最近升级到OSX Mavericks,从那时起,我开始在我的开发机器上得到上述错误.代码中没有明显的问题(它是一个自动生成的Yii示例应用程序).作为升级到小牛队的一部分发生的事情是:

  1. PHP从与OSX Lion捆绑在一起的5.2.x升级到5.4.x.
  2. 我必须通过安装Zend Server获取Zend Debugger for PHP 5.4 ,拿起ZendDebugger.so并卸载Zend Server(所有这一切都是因为Zend没有为php 5.4.x提供独立版本的调试器).

从那时起,我在加载和重新加载网站几次之后就遇到了这个问题.发生此错误后,我的Web服务器将继续为localhost上托管的任何其他应用程序返回相同的错误.我必须提到静态网页服务很好.

我见过几个线程关于这一主题.大多数人都指出代码中的问题是文件句柄未正确关闭,从而超过了打开文件限制阈值.我也发现这个线程似乎暗示这可能是一个zend调试器问题.还有针对php 5.2.x提交的错误报告.在这里的帖子之后,我尝试了以下内容:

$ ulimit -a
Run Code Online (Sandbox Code Playgroud)

报道:

open files (-n) 256
Run Code Online (Sandbox Code Playgroud)

也,

sysctl -a | grep files
Run Code Online (Sandbox Code Playgroud)

回报,

kern.maxfiles = 12288
kern.maxfilesperproc = 10240
kern.maxfiles: 12288
kern.maxfilesperproc: 10240
kern.num_files: 3248
Run Code Online (Sandbox Code Playgroud)

另一个有趣的线程建议使用以下方法提高此限制(目前为256):

ulimit -n 1024
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切,但似乎没有任何工作.问题也不能始终如一地重现.

我想知道使用ulimit -n 1024是否会影响apache,因为从我读过的内容来看,它会影响shell可以打开的文件数量.

任何帮助表示赞赏.

编辑:

  1. 重启apache有一点帮助,直到再次遇到错误.
  2. 让Web服务器空闲一点(没有确定的间隔)也有帮助.

okk*_*ket 17

http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X无耻地偷走

要检查Mac OS X系统上的当前限制,请运行:

$ launchctl limit maxfiles
Run Code Online (Sandbox Code Playgroud)

最后两列分别是软限制和硬限制.

要调整OS X 10.7(Lion)或更高版本中的最大打开文件限制,请编辑/etc/launchd.conf并根据需要增加这两个值的限制.

例如,要将软限制设置为16384文件,将硬限制设置为32768文件,请执行以下步骤:

验证当前限制:

$ launchctl limit

    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    10240          10240
Run Code Online (Sandbox Code Playgroud)

编辑(或创建)/etc/launchd.conf并增加限制.添加如下所示的行(使用适合您环境的值):

limit maxfiles 16384 32768
Run Code Online (Sandbox Code Playgroud)

保存文件,然后重新启动系统以使新限制生效.重新启动后,使用launchctl limit命令验证新限制:

$ launchctl limit

    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    16384          32768
Run Code Online (Sandbox Code Playgroud)

  • 这不再有效.请参阅http://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks (3认同)

Hen*_*nry 5

如果在运行Apache时遇到此问题,则可以配置apache以增加限制:

$ sudo vi /usr/sbin/apachectl

定位: ULIMIT_MAX_FILES=""

并将此行更改为:

ULIMIT_MAX_FILES="ulimit 4096"

然后: sudo apachectl restart

这不适用于CLI脚本。但是,直接将ulimit添加到您的~/.bash_profile(或等效项)应该可以达到该目的。

这具有为apache和终端设置特定限制而不会影响其他应用程序的优势。

另外,通过ulimit使用适用于该环境的命令,您应该能够使此方法适用于其他操作系统。


Cod*_*oet 1

我可能正遭受信息过载的困扰。这里提供了一个可能的解释,我在原来的帖子中也提到过。我想我错过了 OP 提到他正在 Mac OSX 10.8.x 上工作的小细节。我使用的是 10.9,所以我从页面下载了 zenddebugger.so,一切看起来都不错。too many open files一整天都没有收到货。

所以,也许这是 ZendDebugger 的问题。