web-dev-qa-db-ja.com

Apache PHP / OSX Mavericks:-ストリームを開けませんでした:開いているファイルが多すぎます

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

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

それ以来、ウェブサイトの読み込みと再読み込みを数回行った後、この問題が発生します。このエラーが発生した後、私のWebサーバーは、localhostでホストされている他のアプリケーションに対して同じエラーを返し続けます。静的なWebページは問題なく提供されることを述べておかなければなりません。

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

$ 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

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

ulimit -n 1024

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

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

どんな助けでもありがたいです。

編集:

  1. Apacheを再起動すると、エラーが再び発生するまで少しの間役に立ちます。
  2. Webサーバーを少しの間(一定の間隔なしで)アイドル状態にしておくことも役立ちます。
21
Code Poet

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

つまり、それはおそらくZendDebuggerの問題でした。

1
Code Poet

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
17
okket

Apacheの実行中にこの問題が発生した場合は、Apacheを設定して制限を増やすことができます。

$ Sudo vi /usr/sbin/apachectl

検索:ULIMIT_MAX_FILES=""

この行を次のように変更します。

ULIMIT_MAX_FILES="ulimit 4096"

次に:Sudo apachectl restart

これは、CLIスクリプトでは機能しません。ただし、~/.bash_profile(または同等のもの)にulimitを直接追加すると、その目的で機能するはずです。

これには、他のアプリに影響を与えることなく、Apacheおよび端末に特定の制限を設定できるという利点があります。

また、その環境に適用可能なコマンドでulimitを置き換えることにより、この方法を他のOSに適合させることができるはずです。

5
Henry

El Capitainでも同じ問題が発生していました。記事を見つけました here ソリューションの正当なクレジットを借りています。以下のアクションに従ってください:

オープンファイルの制限の調整Yosemite以降でシステム全体のオープンファイルの制限を調整するには、2つの構成ファイルを作成する必要があります。 1つ目は、/ Library/LaunchDaemons/limit.maxfiles.plistにあるプロパティリスト(別名plist)ファイルで、次のXML構成が含まれています。

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>Label</key>
        <string>limit.maxfiles</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxfiles</string>
          <string>65536</string>
          <string>65536</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

これにより、開いているファイルの制限が65536に設定されます。2番目のplist構成ファイルは、/ Library/LaunchDaemons/limit.maxproc.plistに次のように保存する必要があります内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>Label</key>
        <string>limit.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

両方のplistファイルはroot:wheelが所有し、権限-rw-r–r–を持っている必要があります。システムを再起動します。

また、.bashrcのユーザーセッションにそれらを設定して、次のように追加することをお勧めします。

ulimit -n 65536
ulimit -u 2048

お役に立てれば。

2
roborew

上記のデバッガパッチの回答について。残念ながら、上記の回答はphpバージョン5.4に適用され、php 5.3に限定する必要があるため、私にはうまくいきません。

Zendはサーバーのバージョン6.3をリリースしました。これは5.3でphpをサポートします。私はしばらく(ulimitをAppleのデフォルトに戻した後)インストールを試し、テストして問題は発生していません。アップグレード前は、制限を引き上げずにphpデバッグを行うことはできませんでした。

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

0
drewish

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

見る:

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

0
Matthias Kleine