OS X 10.7.1の厄介な「システム内の開いているファイルが多すぎます」という制限を取り除く必要があります。
方法はありますか?
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
like に設定を追加することができ、limit maxfiles
ここに入力したものはすべて上書きされます。
繰り返しますが、記事から:
これを実行すると、カーネル自体には最大数のファイルが含まれますが、シェルには含まれません。そして、この多くのファイルを使用するほとんどのプロセスはシェルによって開始されるため、これを増やしたいと考えています。
そのためのコマンドは次のとおりです。
ulimit -S -n 2048 # or whatever number you choose
この変更も一時的なものです。現在のシェルセッションの間のみ有効です。シェルを開くたびに実行したい場合は.bashrc
、シェル構成ファイル(など.zshrc
)に追加できます。
kern.maxfiles=65000 kern.maxfilesperproc=65000
/etc/sysctl.conf を入れてリブートしました。kern.maxfilesは無視され、デフォルトのままでしたが、kern.maxfilesperprocは65000に設定されていました。/etc/launchd.confがありません。
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
IO Error: Bad file descriptor (Write failed)
ulimit設定を増やす必要があります-最近のOS Xではかなり低い-デフォルトでは256です。ulimit -n 4096
〜/ .profileまたは同等のものを追加または同様にして、ローカル環境で解決します。実行ulimit -a
して現在のレベルを確認します
システム設定を確認するには、これを実行します:
launchctl limit maxfiles
Lion(10240)では、プロセスごとに以前よりもかなり高く設定されています。ただし、まだそこにヒットしている場合は、同じコマンドを使用して目的のレベルでより高く設定できます。変更を永続的にするには、/ etc / launchd.confに関連する行を追加する必要があります。
ulimit -a
)。
他のオプションは、犯人を見つけることです:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
最後の1つについては、開いているファイルを確認できます。
sudo lsof -n | grep socketfil
必要に応じてプロセスを強制終了します
kill $pid
コメントから:
価値のあるものについては、最も開いているファイルを使用してプロセスIDのリストを取得することもできます
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3)なしでうまく機能しました:sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
プロセス名の切り捨てを防ぐために使用します。
人々、Mavericks 10.9.4で
ulimit -n 2048
正常に動作します。新しいログインセッションを起動する必要がある場合があります。
最新のmacOS(執筆時点では10.14.1)では、使用できますsudo launchctl limit maxfiles 64000 524288
(デフォルトでは256)が、現在のセッション内でのみ機能します。永続的な解決策としてlaunchctl
、@ ninjaPixel(https://superuser.com/a/1171028/760235)のジョブを使用してください。
上記のすべての変更の後、私のjavaは10000個以上のファイルを作成しませんでした。解決策は、このjvmフラグ-XX:-MaxFDLimitでした
chmod -Rを実行中に遭遇したので、小さなステップを踏んで回避しました。例えば
# for each directory
find . -type d -exec chmod 755 {} \;
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>
これにより、オープンファイルの制限が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を実行して手動で適用できます。
これらの制限をシステムレベルで設定することに加えて、bashrc、bashprofile、または類似のファイルに次の行を追加して、セッションレベルでも設定することをお勧めします。
ulimit -n 200000
ulimit -u 2048
plistファイルと同様に、bashrcまたは同様のファイルには-rw-r--r--パーミッションが必要です。この時点で、コンピューターを再起動し、ターミナルにulimit -nと入力できます。システムが正しく構成されている場合、maxfilesが200000に設定されていることがわかります。
詳細については、この記事を参照してください。
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
値を有効にするには、必ずMacを再起動してください。