web-dev-qa-db-ja.com

Snow Leopardのオープンファイル記述子の最大数を増やしますか?

私はたくさんのファイルディスクリプタを必要とする何かをやろうとしています

Sudo ulimit -n 12288はSnow Leopardが行きたがっているのと同じくらい高いです。これを超えると、

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

私は100000と言ってもっともっと数値を上げたいです。それは可能ですか?

100
Chris Poole

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ビットモード でカーネルを起動すると助けになるかもしれません。

93
Gordon Davisson

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

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からの 'open files'の値を継承しているようです
  6. / etc/profileまたは〜/ .profile内でカスタムの制限を設定できます。これは必須ではありませんが、例を示しました
  7. これらの値をデフォルト値と比較して非常に高い値に設定する場合は注意が必要です。機能には安定性とセキュリティがあります。私は他のウェブサイトに書かれている、私が合理的であると信じるこれらの例の数字を取った。
40
errant.info

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
33
ninjaPixel

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
20
crishoj

マーベリックスではその単純です。一般ユーザーとして:

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
8
Clustermagnet

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
2
Petr Javorik

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

Sudo launchctl limit maxfiles 100000 unlimited

/etc/launchd.confでこれらの制限を適用することは(他の回答で示唆されるように)最近のmacOSリリースではもはやサポートされていないことに注意してください。ユーザーごとまたはシステム全体のplistname__設定ファイルなどの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設定を保持するにはどうすればいいですか?

1
kenorb