この便利な記事](http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/)(私が読むことをお勧めします)によると:
デフォルトでは、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 で。 10 以下では、/etc/launchd.conf
のように limit maxfiles
に設定を追加すれば、ここに入れたものは何でも上書きされます。
再度、記事より:
ここまでやってしまえば、カーネル自体はファイル数の上限がありますが、シェルはそうではないかもしれません。
そのためのコマンドは次のとおりです:
ulimit -S -n 2048 # or whatever number you choose
この変更も一時的なもので、現在のシェルセッションの間だけ持続します。シェルを開くたびに実行させたい場合は、シェル設定ファイル (.bashrc
, .zshrc
など) に追加することができます。
OS Xのバージョンごとに開くファイルの制限を変更する方法が全く違うようです!
OS X Sierra(10.12.X)の場合は以下のようにしてください:
<?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. */Library/LaunchDaemons/limit.maxfiles.plist
でファイルを作成し、以下のように貼り付けてください(ソフトリミットとハードリミットの2つの数字を自由に変更してください):
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
2.新しいファイルの所有者を変更してください:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
3.これらの新しい設定をロードしてください:
launchctl limit maxfiles
4.最後に正しいチェックをしてください。 ** 新しいファイルの所有者を変更します:
&001
3.これらの新しい設定をロードします:
&001
4.最後に、制限が正しいことを確認してください:
&001
ulimitの設定を上げる必要があるでしょう - 最近のOS Xではかなり低くなっています - デフォルトでは256です。これでローカル環境では解決するでしょう。現在のレベルを確認するために ulimit -n 4096
を実行
システム設定を確認するには、これを実行します:
launchctl limit maxfiles
これは、ライオンでは、それが使用されていたよりもプロセスごとのベースでかなり高い(10240)に設定されています。しかし、それでもまだそこでヒットしているのであれば、同じコマンドを使って希望のレベルでより高く設定することができます。変更を恒久的なものにするには、/etc/launchd.conf に関連する行を追加する必要があります。
他のオプションは、犯人を見つけることかもしれません:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
最後の1つについては、どのようなファイルが開いているかを見ることができます:
sudo lsof -n | grep socketfil
そして、そうすればプロセスを殺すことが望ましい
kill $pid
コメントから:
それが何の価値があるかについては、あなたはまた、
lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail ```を使用して最も開いているファイルを持つプロセスIDのリストを得ることができます
皆さん、Mavericks 10.9.4
ulimit -n 2048
では問題なく動作します。新しいログインセッションを起動する必要があるかもしれません。
最新のmacOS(執筆時点: 10.14.1)では、sudo launchctl limit maxfiles 64000 524288
(デフォルトでは256)が使えますが、現在のセッション内でしか動作しません。恒久的な解決策としては、@ninjaPixel https://superuser.com/a/1171028/760235 ) の launchctl
ジョブを使用してください。
あなたは、プロセスがあまりにも多くのファイルを開いている
lsof -n
を実行することができます。
sysctl -w kern.maxfiles=20480
は、それを殺す。
上記のすべての変更の後、私のjavaは10000以上のファイルを作成しませんでした。解決策は、このjvmフラグ-XX:-MaxFDLimitでした。
同様に https://superuser.com/a/1171028/367819
あなたのMac OS Xシステム上の現在の制限をチェックするには、実行します:
launchctl limit maxfiles
最後の2つの列は、それぞれソフトとハードの制限です。
Mac OS X Yosemiteでシステム全体のベースでオープンファイルの制限を調整するには、2つの設定ファイルを作成する必要があります。最初は、/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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
これは、オープンファイルの制限を 200000 に設定します。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 を実行することで設定されていることを確認することができます。上で説明した手順により、再起動時にシステム全体のオープンファイルの制限が正しく設定されるようになりますが、 launchctl limit を実行することで、手動で制限を適用することができます。この時点で、コンピュータを再起動し、ターミナルに ulimit -n と入力します。システムが正しく設定されていれば、maxfiles が 200000 に設定されていることがわかるはずです。
詳細はこちらの記事をご覧ください。