
OS X 10.7.1 の厄介な「システムで開いているファイルが多すぎます」という制限を取り除く必要があります。
方法はあるでしょうか?
答え1
によるとこの役に立つ記事(ぜひ読んでみてください):
デフォルトでは、Mac OS X が開くことができるファイルの最大数は 12,288 に設定されており、特定のプロセスが開くことができるファイルの最大数は 10,240 です。
これらは以下で確認できます:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
以下の方法で制限を増やすことができます (自己責任で)。
sysctl -w kern.maxfiles=20480
(または任意の数字)sysctl -w kern.maxfilesperproc=18000
(または任意の数字)
変更を永続的にするには、次のように、sudo
を使用して設定を入力します/etc/sysctl.conf
(設定は作成する必要がある場合があります)。
kern.maxfiles=20480
kern.maxfilesperproc=18000
注: OS X 10.10 以前では、/etc/launchd.conf
次のように設定を追加することができlimit maxfiles
、ここで入力した内容は上書きされます。
再び記事から引用します。
これを実行すると、カーネル自体には最大数のファイルがありますが、シェルにはない可能性があります。また、この数のファイルを使用するプロセスのほとんどはシェルによって開始されるため、この数を増やす必要があります。
そのためのコマンドは次のとおりです。
ulimit -S -n 2048 # or whatever number you choose
この変更も一時的なもので、現在のシェル セッションでのみ有効です。シェルを開くたびに実行したい場合は、シェル構成ファイル ( など).bashrc
に追加できます。.zshrc
答え2
OS X のバージョンごとに、オープンファイルの制限を変更する方法がまったく異なるようです。
OS X Sierraの場合(10.12.X) 次の操作が必要です:
1.
にファイルを作成し/Library/LaunchDaemons/limit.maxfiles.plist
、次の内容を貼り付けます (2 つの数値 (それぞれソフト制限とハード制限) は自由に変更できます)。
<?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>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
2. 新しいファイルの所有者を変更します:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. 次の新しい設定を読み込みます:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. 最後に、制限が正しいことを確認します。
launchctl limit maxfiles
答え3
他の選択肢としては、犯人を見つけることです:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
最後に、開いているファイルを確認できます。
sudo lsof -n | grep socketfil
必要に応じてプロセスを強制終了します
kill $pid
コメントより:
参考までに、最も多く開いているファイルのプロセスIDのリストを取得するには、次のようにします。
lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
答え4
皆さん、Mavericks 10.9.4 について
ulimit -n 2048
正常に動作します。新しいログイン セッションを起動する必要がある可能性があります。