私はたくさんのファイルディスクリプタを必要とする何かをやろうとしています
Sudo ulimit -n 12288
はSnow Leopardが行きたがっているのと同じくらい高いです。これを超えると、
/ usr/bin/ulimit:4行目:ulimit:ファイルを開く:制限を変更できません:無効な引数です。
私は100000と言ってもっともっと数値を上げたいです。それは可能ですか?
ulimit
コマンドを使用すると、現在のシェルとその子のリソース制限のみが変更され、Sudo ulimit
はルートシェルを作成し、その制限を調整して終了します(したがって、私の知る限り、実際の効果はありません)。
12288を超えるには、カーネルのkern.maxfiles
およびkern.maxfilesperproc
パラメータを調整する必要があります(少なくとも このブログエントリ に従う)。 この説明 )起動制限。 launchctl limit
を使用して、これらすべてを一度に調整できます。
Sudo launchctl limit maxfiles 1000000 1000000
これを恒久的なものにする(つまり、再起動してもリセットされないようにする)には、次のものを含む/etc/launchd.conf
を作成します。
limit maxfiles 1000000 1000000
それではulimit
(ただしSudo
はなし)を使ってプロセス制限を調整できます。
これでうまくいかない場合は、カーネルのサイズ制限に達している可能性があります。 モデルがそれをサポートしている場合 、 64ビットモード でカーネルを起動すると助けになるかもしれません。
以下は、ほとんどの解決策を解決するはずです(そしてそれらの階層の順序でリストされています)。
echo 'kern.maxfiles=20480' | Sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | Sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | Sudo tee -a /etc/profile
ノート:
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
OS X Lionは値として "無制限"を許可しないようです。
% Sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.
ソフトリミットとハードリミットの両方に数値を指定すると、仕事ができます。
% Sudo launchctl limit maxfiles 4096 8192
マーベリックスではその単純です。一般ユーザーとして:
ulimit -n 8192
更新された設定は次の方法で確認できます。
ulimit -a
私のマシンでは:
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 8192
OS X 10.13.6でこれは私のために働きます:
$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ Sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ Sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576
一部の制限は現在のシェルにのみ適用されるため、ulimit
name__で変更することはできません。したがって、launchctl
name__コマンドを使用して制限をグローバルに変更する必要があります。
Sudo launchctl limit maxfiles 100000 unlimited
/etc/launchd.conf
でこれらの制限を適用することは(他の回答で示唆されるように)最近のmacOSリリースではもはやサポートされていないことに注意してください。ユーザーごとまたはシステム全体のplist
name__設定ファイルなどのlaunchd.plist
(参照:man launchd.plist
)は、引き続き使用できますが こちら 、 がありますあります 。
これらの制限を永続的にするには、/etc/sysctl.conf
ファイルを使用して以下のように追加します。
kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000
変更を有効にするには、再起動が必要です。
現在の制限を確認するには、launchctl limit
またはsysctl -a | grep ^kern.max
を実行します。