開いているファイルの制限を制御するコマンドはどれですか?


19

OS Xで開くファイルの制限を制御するコマンド/構成ファイルはどれですか?OS X 10.5 / 10.6 / 10.7には別のコマンドがありますか?私は以下の探検のオプションがありulimitsysctlあり、launchctl

「開いているファイルが多すぎる」は、Leopard、おそらく他のバージョンのOS Xでよく見られるエラーです。

開いているファイルの制限を表示するには、多くの(関連する?)方法があります。

$ 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) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

上記の投稿のいくつかで、これらは次のコマンドで変更できると主張されています。

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

しかし、上記のコマンドのうち、唯一sysctlのコマンドは(つまり、任意の明らかな効果を持っているulimit -nと、launchctl limit上記のコマンドが入力された後、しばらくは何の変化も示さないsysctl -a要求された変更を表示しています)。

OSのこれらのパラメーターを変更するための対応する場所は次のとおりです。

/etc/sysctl.conf
/etc/launchd.conf

また、現在のシェルのみを制御する読み取りの答えを1つ発見しましたulimit

macOSで最大ファイル数 / 最大オープンファイル数制限を上方調整するにはどうすればよいですか?

回答:


9

単純な答えは、以前は複数の制限があり、特定のインスタンスで到達した最低の制限がエラーを生成するというものでした。現在、10.12 launchctl limit maxfilesにも含まれています。実装の詳細については、この素晴らしい答えは賞金を得ており、私が与えることができるものよりも多くの票に値します。

その他の関連するスレッドは次のとおりです。

ulimitレベルは、開いているファイルとカーネルを洪水から1つの貧しいシェルスクリプトを防ぐために低く設定されています。

kern.maxfilesperproc一つのプロセスは、ほとんどすべてではありませんが、カーネルから開かれているファイルハンドラ・スペースの使用することができるようにカウント最大ファイル内の余地が残すことです。

通常の状況でkern.maxfilesは、これが最終的な制限要因です。

Sierraでは、制限は256のオープンファイルと無制限の最大であるため、ソフト制限に設定された3〜4,000ファイルがほぼすべてのハードウェアで機能し、暴走プロセスがあまりにも多く開いてもシステムが応答し続けることがわかりますファイル。開発サーバーを256の制限に維持して、実稼働環境で検出するのではなく、リーク/問題のあるソフトウェアを開発/ステージングおよびテストで検出できるようにします。

私は1万個のファイルのファンではありません。APFSとNVMeストレージでは、考えられない日が来るかもしれませんが、ファイルの制限を数百または数千にとどめてみてください。特に、ご使用のMacのプロセス制限低い場合、非常に少ないプロセスで非常に多くのファイルを開くと問題が発生する可能性があります。


9

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番目の値を「無制限」に設定することにより、この方法でmaxfilesを無制限に設定するのに問題があるようです。何かご意見は?
user200857

7

以下は、最も一般的な問題を解決するはずです(階層順にリストされています):

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. これらの値をデフォルトと比較して非常に高い値に設定する場合は注意してください-機能には安定性/セキュリティがあります。他のウェブサイトに書かれた、合理的であると思われるこれらのサンプル番号を採用しました。

0

簡単な言葉で:

  • このulimitコマンドは、「シェルが使用できるリソースとシェルが作成するプロセスを制御する」機能を提供します(参照:help ulimitおよびman bash)。シェルに与えられるリソースは、システムリソースの制限によって制限されます。

  • launchctl現在のプロセスによってコントロール最大システムリソース消費(参照:man setrlimitman launchctl)。最大値はカーネルの制限によって制限されます。

  • sysctlコントロールは、制限を(:参照カーネルman sysctlBSDのチューニングカーネルの制限)。

制限を増やすには、問題に応じて各コマンドを使用できます。

参照:「launchctl limit」と「ulimit」の関係は何ですか?


開いているファイルが多すぎる問題の場合、これは厳密にソフトまたはハード制限に達しているかどうかに依存します(ローカルシェルスクリプト、rootアプリケーションによって実行されるグローバルスクリプト、アプリ、またはすべてのプロセスが同時に)。すべての制限(シェル、launchdおよびカーネルの制限)を増やす価値があります。

制限を永続的に増やすには、次を参照してください:Macで最大システムリソース消費を永続的に制御する方法は?

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