MacOS HighSierraの動作を理解しようとしています。これが私のマシンの出力です:
launchctl limit maxfiles
maxfiles256無制限
sysctl kern.maxfiles
kern.maxfiles:12228
sysctl kern.maxfilesperproc
kern.maxfilesperproc:10240
私の質問は次のとおりです。
- _
maxfiles 256
_から_launchctl limit maxfiles
_はプロセスごとの制限ですか?
はい。 _launchctl limit maxfiles
_は、getrlimit(2)
によって報告されたプロセスごとのソフト制限とハード制限を出力します。そのマニュアルページには次のように記載されています。
リソース制限は、ソフト制限とハード制限として指定されます。 ソフト制限を超えると、プロセスはシグナルを受信する場合があります(たとえば、 cpu時間またはファイルサイズを超えた場合)が、con- は許可されます。ハード制限に達するまで(またはリソース 制限を変更するまで)実行を続けます。
getrlimit(2)
は、シェルの組み込みコマンドulimit
が情報を取得する場所です。
- _
launchctl limit maxfiles
_が_kern.maxfiles
_および_kern.maxfilesperproc
_と異なるのはなぜですか?
_launchctl limit maxfiles
_は、launchdがプロセスに課すプロセスごとのソフト制限とハード制限を報告します。 Launchedは、256のソフト制限と「無制限」のハード制限を課しているようです。つまり、カーネルではlaunchd
ではなく_kern.maxfilesperproc
_によってのみ制限されます。
_kern.maxfiles
_は、システム全体のファイル記述子の合計の制限です。すべてのプロセスで開いているすべてのファイルと、カーネルが独自の目的で開いているすべてのファイルの合計。
- アプリケーションからユーザーが手動で起動するアプリケーションには、どの制限(_
maxfiles 256
_または_kern.maxfilesperproc: 10240
_)が適用されますか?
GUIからアプリを起動するユーザーが手動で起動したアプリケーションは、起動時に課せられる256のソフト制限と「無制限」のハード制限を継承するため、十分な空きファイル記述子があると仮定すると、ハード制限は実質的に_kern.maxfilesperproc
_になります。システム全体が_kern.maxfiles
_に達する前に、アプリが制限に達する可能性があるシステム。
プロセス(アプリ)は、システムコールを使用して、実行後にソフト制限を調整することもできます。したがって、256のソフト制限は起動時のデフォルトであり、アプリ/プロセスはすぐに独自のソフト制限を増やす可能性があります。