Snow Leopardで開くことができるファイル記述子の最大数を増やしますか?


101

大量のファイル記述子が必要なことをしようとしています

sudo ulimit -n 12288Snow Leopardが望んでいるほど高い。この結果を超えて

/ usr / bin / ulimit:行4:ulimit:ファイルを開く:制限を変更できません:引数が無効です。

数字をもっと大きく、100000に増やしたいのですが、可能ですか?


4
この質問の回答は、OSX Mavericksでは機能しなくなりました。
ハワード14年

2
echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confMavericksでは、実行と再起動が機能します。
リリ

回答:


95

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ビットモードで起動すると役立つ場合があります。


1
sudo launchctl limit maxfiles 1000000 unlimited「maxfiles」のハード制限もソフト制限も無制限にすることはできません。両方に数値パラメーターを使用してください。
トーマスハンター

2
その行をに追加するときは注意してくださいlaunchd.conf。数が小さすぎると、コンピューターが使用できなくなると思います。たとえば、私は使用limit maxfiles 1024 1024して、元に戻すのに本当に苦労しました。
ショーン14年

1
悲しいかな:「/etc/launchd.confファイルは、起動時の早い段階で実行するサブコマンドについてはもう調べられません。この機能はセキュリティを考慮して削除されました。」
アリスパーセル

ulimit -Sn 10240を正常に設定しても、fd番号は6kを超えることはできません。
建Weihang

@JianWeihang fd番号はプロセスごとであるため、他のプロセスで4000個のファイルが開かれていると思います。Chromeを実行していますか?;)
Trejkaz

41

以下はほとんどのソリューションを解決するはずです(そしてそれらの階層の順にリストされています):

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

ノート:

  1. これらの変更を有効にするには、再起動する必要があります。
  2. 知っている限り、OS Xで制限を「無制限」に設定することはできません
  3. launchctl maxfilesはsysctl maxfilesによって制限されているため、それらを超えることはできません
  4. sysctlはlaunchctl maxfilesからkern.maxfilesperprocを継承しているようです
  5. ulimitはデフォルトでlaunchctlから「ファイルを開く」値を継承しているようです
  6. / etc / profileまたは〜/ .profile内でカスタムulimitを設定できます。これは必須ではありませんが、例を提供しました
  7. これらの値をデフォルトと比較して非常に高い値に設定する場合は注意してください-機能には安定性/セキュリティがあります。他のウェブサイトに書かれた、合理的であると思われるこれらのサンプル番号を採用しました。

3
悲しいかな:「/etc/launchd.confファイルは、起動時の早い段階で実行するサブコマンドについてはもう調べられません。この機能はセキュリティを考慮して削除されました。」
アリスパーセル

34

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

2
この答えは素晴らしいもので、@ ninjaPixelに追加する背景を見つけました:blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan
ディーンラドクリフ

20

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

3
値の1つが無制限だった場合、値-1として使用すると12288。より大きな数値を使用することができますsudo launchctl limit maxfiles 15000 150000。ただし、これらの設定が効果があるかどうかはわかりません。
ダニエルベック

8

マーベリックスではそのシンプル。通常のユーザーとして:

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

2
ソリューションの修正を検討してください。ulimitを1024に設定し、出力ファイル記述子を8192(1024である必要があります)として表示しています。アプローチもsudoを使用しないプロベルマティックです。数回変更してみてください。
y3sh 14年

1
ここではsudoを使用すべきではありませんが、この答えは間違っています。マーベリックスのユーザーはecho limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf、マシンを使用してから再起動する必要があります
カイルチャダ

3

上の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

1

ulimit現在のシェルにのみ適用されるため、一部の制限は変更できません。したがって、launchctlコマンドを使用して制限をグローバルに変更する必要があります。

sudo launchctl limit maxfiles 100000 unlimited

/etc/launchd.conf(他の回答で示唆されているように)これらの制限の適用は、最近のmacOSリリースではサポートされていないことに注意してください。herethere、および向こう提案されているように、ユーザーごとまたはシステム全体の構成ファイルなどを引き続き使用できますlaunchd.plist(参照:)。man launchd.plistplist


これらの制限を永続的にするには、/etc/sysctl.confファイルを使用して、たとえば次を追加します。

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

変更を有効にするには、再起動が必要です。

現在の制限を確認するには、次を実行します:launchctl limitまたはsysctl -a | grep ^kern.max

関連項目:macOSでulimit設定を保持するには?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.