オープン可能なファイル数の上限 maxfiles (open files), 起動可能なプロセス数の上限 max proc (max user processes) を大きくしたい、という状況が生じた。
結構苦戦した (というか苦戦中)。 macOS のバージョンごとに事情が異なるらしい。
launchctl limitあるいは個別の値だけを見るには launchctl limit maxfiles launchctl limit maxproc |
例えば、普段使っている El Capitan の Mac では、 maxproc の hard limit が 1064, soft limit が 709, maxfiles の hard limit が unlimited, soft limit が 256 だった。
シェルの状況は ulimit コマンドで分かる。
mknoMacBook-Pro:~ mk$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 256 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 709 virtual memory (kbytes, -v) unlimited mknoMacBook-Pro:~ mk$ |
シェルの設定を ulimit -n 数 や ulimi -u 数 で 変更可能という情報もあり、実際にそうして変更できた場合もあるが、 うまく行かない場合もあった (どこに条件の違いがあるのか分からなかった)。
システム上の制限値がシェルの制限値に影響している (709, 256 はコピーだろう) ようなので、システム上の制限値を変えることにした。
(もしかして ulimit osx el capitan が元ネタなのかな?)
maxproc を 2048, maxfiles を 524288 にしてある (どういう理由でこう選択したのだろう? ネットを徘徊すると、 maxproc はこの値にしている人が多いようだけど、 maxfiles の方は 65536 に留めている人も多い)。
limit.maxfiles.plist, limit.maxproc.plist は上の二つのサイトにあるものを参考にすると良い。
私が実行したのは、macOS Sierra の走っている Mac.
こうすれば設定が変更できる(?) |
curl -O http://nalab.mind.meiji.ac.jp/~mk/misc/limit.maxfiles.plist curl -O http://nalab.mind.meiji.ac.jp/~mk/misc/limit.maxproc.plist(limit.max*.plist の内容は保証しません。) sudo cp limit.maxfiles.plist /Library/LaunchDaemons/ sudo cp limit.maxproc.plist /Library/LaunchDaemons/ sudo chown root:wheel /Library/LaunchDaemons/limit.max*.plist sudo chmod 644 /Library/LaunchDaemons/limit.max*.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxproc.plist |
それから再起動したところ。
mknoMacBook-Pro:~ mk$ launchctl limit cpu unlimited unlimited filesize unlimited unlimited data unlimited unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 2048 2048 maxfiles 524288 524288 mknoMacBook-Pro:~ mk$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 524288 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 2048 virtual memory (kbytes, -v) unlimited mknoMacBook-Pro:~ mk$ |
後で別のマシンで試したところ、再起動をしなくても良いようだった (ターミナルを起動し直して ulimit -a としたら増えていた)。 やはり公式の解説文書が欲しい…
それから…なんでも今の Mac には、 "hard maximum" (proposed by Apple) というのがあって、 上の設定法は、その最大値を超えることは出来ないのだそうだ。 それを超えるためには、 "OS X Server" というのを買う必要があるとか。
なんか面倒くさくなって来た…
桂田 祐史