22

最近 OSX Mavericks にアップグレードしましたが、それ以来、開発マシンで前述のエラーが発生し始めました。コードに明らかな問題はありません (自動生成されたYiiサンプル アプリケーションです)。Mavericks へのアップグレードの一環として行われたことは次のとおりです。

  1. PHP は、OSX Lion にバンドルされていた 5.2.x から 5.4.x にアップグレードされました。
  2. Zend Server をインストールし、ZendDebugger.so を取得し、Zend Serverをアンインストールして、PHP 5.4 用の Zend デバッガーを取得する必要がありました (Zend は php 5.4.x 用のデバッガーのスタンドアロン バージョンを提供していないためです)。

それ以来、ウェブサイトを数回ロードしてリロードした後、この問題が発生しています。このエラーが発生した後、Web サーバーは、localhost でホストされている他のアプリケーションに対して同じエラーを返し続けます。静的な Web ページは問題なく提供されることに言及する必要があります。

このトピックに関するいくつかのスレッドを見てきました。ほとんどの場合、ファイル ハンドルが適切に閉じられていないため、開いているファイルの制限のしきい値を超えているというコードの問題が指摘されています。また、これが zend デバッガーの問題である可能性があることを示唆しているように見えるこのスレッドも見つけました。また、php 5.2.x 用に提出されたバグ レポートもあります。ここのスレッドに従って、次のことを試しました。

$ ulimit -a

レポート:

open files (-n) 256

また、

sysctl -a | grep files

戻り値、

kern.maxfiles = 12288
kern.maxfilesperproc = 10240
kern.maxfiles: 12288
kern.maxfilesperproc: 10240
kern.num_files: 3248

別の興味深いスレッドは、次を使用してこの制限 (現在は 256) を引き上げることを提案しています。

ulimit -n 1024

私はすべてを試しましたが、何も機能していないようです。また、この問題は一貫して再現可能ではありません。

ulimit -n 1024私が読んだことから、シェルが開くことができるファイルの数に影響するため、使用がApacheに影響を与えるのではないかと思っています。

どんな助けでも大歓迎です。

編集:

  1. エラーが再び発生するまで、再起動apacheすると少し役立ちます。
  2. Web サーバーを少しの間アイドル状態にしておくことも役に立ちます (明確な間隔はありません)。
4

7 に答える 7

18

http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-Xから恥知らずに盗まれた

Mac OS X システムの現在の制限を確認するには、次を実行します。

$ launchctl limit maxfiles

最後の 2 つの列は、それぞれソフト制限とハード制限です。

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

/etc/launchd.confを編集 (または作成)し、制限を増やします。次のような行を追加します (環境に適した値を使用)。

limit maxfiles 16384 32768

ファイルを保存し、システムを再起動して新しい制限を有効にします。再起動後、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
于 2013-11-05T11:14:05.467 に答える
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また、その環境に適したコマンドに置き換えることで、この方法を他の OS に適応させることができるはずです。

于 2016-02-06T21:07:46.823 に答える
1

私はおそらく情報過多に苦しんでいました。元の投稿でも言及した可能性のある説明が提供されています。OPがMac OSX 10.8.xに取り組んでいると言及している小さな詳細を見逃したと思います。私は 10.9 を使用しているので、ページから zenddebugger.so をダウンロードしましたが、問題はないようです。一日中一枚も出ていませんtoo many open files

したがって、おそらくそれは ZendDebugger の問題でした。

于 2013-11-05T13:21:35.083 に答える
0

xDebug の実行で同じエラーが発生しました。アップグレードにより問題が解決しました。

見る:

https://superuser.com/questions/787888/too-many-files-open-on-mac-osx-after-running-apache-in-php-with-xdebug-for-som/829413#829413

于 2016-01-20T13:43:24.430 に答える
0

http://forums.zend.com/viewtopic.php?t=110823&start=10#p219438によると、これは実際には 6.2 で修正された Zend Server の単なるバグだったと思います。

于 2015-07-28T05:09:53.347 に答える