私は最近マーベリックスからヨセミテにアップグレードしました...頭痛が続いた
問題は、開くことができるファイルの数にあると確信しています-しかし、私はそれを解決する方法がわかりません。また、/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インストールエラー
この問題を解決するために、さまざまな方法を試したり、ググったりしてみました(例:追加のフラグなど)。驚くべきことです。そして、この問題は開いているファイル/プロセスの数に関係していると私が考え始めたときは、宝石のインストール中にtop
をチェックしたときです...私が見つけたものを見て驚いた
gem install nokogiri
中のトップ
私のプロセスは分岐し続けているようですが、これは前の画像のこの1行で意味がありました(「nokogiriインストールエラーの画像」を参照)
sh: fork: Resource temporarily unavailable
だから私はちょっとアイデアがなくなったのですが、ファイルの数をデバッグする方法が本当にわかりませんか?
[〜#〜]更新[〜#〜]
なんとかノコギリをインストールできました。残念ながら、私はそれをどのように修正したのか正確にはわかりません。しかし、Rubyを再インストールして対処する必要があったと思います。しかし、些細なものではない種類のデータベースを使用すると、あまりにも多くのファイルが開いているとDBが文句を言うので、同じ問題が引き続き発生します。
多くのgoogleクエリとSOの提案に従って/etc/launchd.conf
を変更すると、ヨセミテ(10.10)では提案が機能しなかったようです。何回変更/再起動した後、何が機能しましたか/ testの組み合わせは、/etc/sysctl.conf
ファイルを変更(または、存在しない場合は作成)していました。
これは私がそれを機能させるために入れなければならなかったものです
kern.maxfiles=65536
kern.maxfilesperproc=65536
kern.maxfiles
が必要かどうかはわかりませんが、kern.maxfilesperproc
を追加すると、すべてが機能し始め、同じ問題が発生しました。
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
を実行して手動で適用することもできます。
システムレベルでこれらの制限を設定することに加えて、bashrc
、bashprofile
、または類似のファイルに次の行を追加して、セッションレベルでも設定することをお勧めします。
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/
ヨセミテのデフォルトは12Kと10Kのようです:
$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240
設定のみkern.maxfiles
/etc/sysctl.conf
は私の問題を解決したようです。 /etc/sysctl.conf
ファイル:
kern.maxfiles=24576