mac – Snow Leopard で開くファイル記述子の最大数を増やす?

file-descriptors mac osx-snow-leopard ulimit

大量のファイルディスクリプタが必要なものをやろうとしています

sudo ulimit -n 12288は、Snow Leopardが行きたいと思っているのと同じくらいの高さで、これを超えると結果が出ます

/usr/bin/ulimit: 4行目: ulimit: ファイルを開く: 変更できません limit: 無効な引数です

もっともっと高く、例えば100000とかにしたいです。それは可能でしょうか?

  106  Chris Poole  2011-06-27


ベストアンサー

ulimit コマンドを使うと、現在のシェルとその子孫のリソース制限を変更するだけで、sudo ulimit はルートシェルを作成し、制限を調整してから終了します (私が見た限りでは、実際には何の効果もありません)。 12288 を超えるためには、カーネルの kern.maxfileskern.maxfilesperproc のパラメータを調整する必要があり、また (少なくとも このブログ記事 によると、この議論 の要約である) launchd の制限を調整する必要があります。これらを一度にすべて調整するには、launchctl limitを使用します

sudo launchctl limit maxfiles 1000000 1000000

これを恒久的なものにするには (つまり再起動時にリセットされないようにするには)、/etc/launchd.conf を作成してください

limit maxfiles 1000000 1000000

そして、ulimit (ただし、sudoを使用せずに) を使用して、プロセスの制限を調整することができます

これでうまくいかない場合は、カーネルのサイズ制限に遭遇している可能性があります。お使いのモデルがサポートしている場合は、64 ビットモードでカーネルを起動するとよいでしょう

99  Gordon Davisson  2011-06-27


以下は、ほとんどの解決策を解決するはずです(そして、その階層の順にリストアップされています)

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

Notes:

  1. これらの変更を有効にするには、再起動する必要があります
  2. AFAIKでは、OS Xでは「無制限」に制限を設定することができなくなりました
  3. launchctl maxfiles は sysctl maxfiles によって制限されているので、それを超えることはできません
  4. sysctl は launchctl maxfiles から kern.maxfilesperproc を継承しているようです
  5. ulimit はデフォルトで launchctl の ‘open files’ 値を継承しているようです
  6. etc/profile や ~/.profile でカスタム ulimit を設定することができます
  7. それらのデフォルトと比較したときに非常に高い数字にこれらの値のいずれかを設定するときに注意してください – 機能は安定性/セキュリティが存在します。私は他のウェブサイトに書かれている、私は合理的であると信じているこれらの例の数字を取ってきました

42  errant.info  2012-12-03


OS Xのバージョンごとに開いているファイルの制限を変える方法が全く違うようです

OS X Sierra(10.12.X)の場合は必要です

1.Library/LaunchDaemonslimit.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

38  ninjaPixel  2017-01-24


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

21  crishoj  2011-12-10


Mavericksではシンプルです。常用者として

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

9  Clustermagnet  2014-09-04


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

3  Petr Javorik  2018-12-21


いくつかの制限は現在のシェルにしか適用されないため、ulimitでは変更できないものもありますので、launchctlコマンドを使ってグローバルに制限を変更する必要があります

sudo launchctl limit maxfiles 100000 unlimited

/etc/launchd.conf (他の回答で示唆されているように) でこれらの制限を適用することは、最近の macOS リリースではサポートされていないことに注意してください。こちら, こちら, こちら, こちら のように、ユーザ単位やシステム全体の plist 設定ファイルなど、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を実行してください

こちらも参照してください。macOSでulimitの設定を持続させるには?

2  kenorb  2017-07-29


タイトルとURLをコピーしました