web-dev-qa-db-ja.com

OS X Yosemite-開いているファイルが多すぎる

私は最近マーベリックスからヨセミテにアップグレードしました...頭痛が続いた

問題は、開くことができるファイルの数にあると確信しています-しかし、私はそれを解決する方法がわかりません。また、/etc/sysctl.confファイルと/etc/launchd.confファイルの作成に関するすべての記事/ヒントを読んだことも確信しています。

わかりやすくするために、これは現在両方ともn.bのように見えます。 (これらが適切なコマンドであるかどうかは定かではありません-私はすべてとすべての組み合わせについて試しました。つまり、高い値、低い値、コマンドの削除、コマンドの追加)

/ etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/ etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

私のulimit値を増やしてみました-現在のセッションでグローバルとローカルの両方...ブエノなし

ulimit -a

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                4096

OK-これが私の頭痛の種となった最初の場所です...私のDB(homebrew経由でインストールされたpercona-server 5.6.21-69.0)が窒息して死に始め、mysql-error.logにエラーtoo many files open

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

これは私が最初にulimit、maxfiles、maxprocなどを「アップ」することによってその問題を解決しようと試みた場所です...

結局、イライラして、私は先に進み、後でその問題に戻ります。それで、私はSudo gem install nokogiriを何度も試みましたが、失敗してこの同じエラーを吐き出しました(builder.rbに関する多くの繰り返しが、gemネイティブ拡張のビルドに失敗しました-一連のスタックトレースが続きます- ログ要旨

nokogiriインストールエラー nokogiri install errors

この問題を解決するために、さまざまな方法を試したり、ググったりしてみました(例:追加のフラグなど)。驚くべきことです。そして、この問題は開いているファイル/プロセスの数に関係していると私が考え始めたときは、宝石のインストール中にtopをチェックしたときです...私が見つけたものを見て驚いた

gem install nokogiri中のトップ Sudo gem install nokogiri

私のプロセスは分岐し続けているようですが、これは前の画像のこの1行で意味がありました(「nokogiriインストールエラーの画像」を参照)

sh: fork: Resource temporarily unavailable

だから私はちょっとアイデアがなくなったのですが、ファイルの数をデバッグする方法が本当にわかりませんか?

[〜#〜]更新[〜#〜]

なんとかノコギリをインストールできました。残念ながら、私はそれをどのように修正したのか正確にはわかりません。しかし、Rubyを再インストールして対処する必要があったと思います。しかし、些細なものではない種類のデータベースを使用すると、あまりにも多くのファイルが開いているとDBが文句を言うので、同じ問題が引き続き発生します。

18
veilig

多くのgoogleクエリとSOの提案に従って/etc/launchd.confを変更すると、ヨセミテ(10.10)では提案が機能しなかったようです。何回変更/再起動した後、何が機能しましたか/ testの組み合わせは、/etc/sysctl.confファイルを変更(または、存在しない場合は作成)していました。

これは私がそれを機能させるために入れなければならなかったものです

kern.maxfiles=65536
kern.maxfilesperproc=65536

kern.maxfilesが必要かどうかはわかりませんが、kern.maxfilesperprocを追加すると、すべてが機能し始め、同じ問題が発生しました。

16
veilig

Mac OS X 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--の権限が必要です。この権限はデフォルトで適切に設定されているはずですが、Sudo chmod 644 <filename>を実行することで、適切に設定できます。上記の手順では、システム全体のオープンファイルの制限が再起動時に正しく設定されますが、launchctl limitを実行して手動で適用することもできます。

システムレベルでこれらの制限を設定することに加えて、bashrcbashprofile、または類似のファイルに次の行を追加して、セッションレベルでも設定することをお勧めします。

ulimit -n 65536
ulimit -u 2048

Plistファイルと同様に、bashrcまたは同様のファイルには-rw-r--r--権限が必要です。この時点で、コンピュータを再起動して、ターミナルにulimit -nと入力できます。システムが正しく構成されている場合は、maxfilesが65536に設定されていることがわかります。

出典: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

8
Jedateach

ヨセミテのデフォルトは12Kと10Kのようです:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

設定のみkern.maxfiles/etc/sysctl.confは私の問題を解決したようです。 /etc/sysctl.confファイル:

kern.maxfiles=24576
5
Michel