私はOS X 10.7.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
その変更も一時的です。現在のShellセッションの間だけ持続します。シェルを開くたびに実行したい場合は、シェル設定ファイル(.bashrc
、.zshrc
など)に追加できます。
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
あなたはあなたのulimit設定を増やす必要があるでしょう - それは最近のOS Xではかなり低いです - デフォルトでは256です。 ulimit -n 4096
をあなたの〜/ .profileまたは同等のものに追加すれば、それはあなたのローカル環境でそれを解決するでしょう。 ulimit -a
を実行して現在のレベルを確認してください
システム設定を確認するには、これを実行します。
launchctl limit maxfiles
Lion(10240)では、プロセスごとの基準で以前よりかなり高く設定されています。しかし、それでもまだ打撃を与えているのであれば、希望するレベルで同じコマンドを使用してより高く設定できます。変更を恒久的なものにするには、関連行を追加する必要があります。
他のオプションは原因を見つけることかもしれません:
Sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
最後のファイルについては、どのファイルが開かれているかを見ることができます。
Sudo lsof -n | grep socketfil
そして必要に応じてプロセスを強制終了する
kill $pid
コメントから:
それが価値があるもののために、あなたはまた最もオープンなファイルでプロセスIDのリストを取得することができます。
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
Mavericksの人々、10.9.4
ulimit -n 2048
はうまくいきます。新しいログインセッションを開始する必要があるかもしれません。
最新のmacOS(執筆時:10.14.1)では、Sudo launchctl limit maxfiles 64000 524288
(デフォルトでは256)を使用できますが、それは現在のセッション内でのみ機能します。恒久的な解決策としては、@ ninjaPixel(launchctl
job)( https://superuser.com/a/1171028/760235 )を使用してください。
私のJavaの上のすべての変更の後でそれ以上の10000ファイルを作りませんでした。解決策はこのjvmフラグでした - XX:-MaxFDLimit
走れます
lsof -n
どのプロセスが多すぎるファイルを開きます。
それを殺します。
または
sysctl -w kern.maxfiles=20480
大きい方に変更してください。
https://superuser.com/a/1171028/367819に似ています
Mac OS Xシステムの現在の制限を確認するには、次のコマンドを実行してください。
launchctl limit maxfiles
最後の2列は、それぞれソフト限界とハード限界です。
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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
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制限を実行して手動で適用することができます。
システムレベルでこれらの制限を設定することに加えて、bashrc、bashprofile、または類似のファイルに次の行を追加してセッションレベルでも設定することをお勧めします。
ulimit -n 200000
ulimit -u 2048
Plistファイルと同様に、あなたのbashrcまたは同様のファイルには-rw-r - r--権限が必要です。この時点で、コンピュータを再起動して、端末にulimit -nと入力することができます。システムが正しく設定されていれば、maxfilesが200000に設定されているはずです。
詳しくはこの記事を読んでください。
https://Gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
値を有効にするには、必ずMacを再起動してください。
Chmod -Rを実行している間に私はそれに遭遇しました。
# for each directory
find . -type d -exec chmod 755 {} \;