web-dev-qa-db-ja.com

launchctl limit maxfiles vs sysctl kern.maxfilesperproc

MacOS HighSierraの動作を理解しようとしています。これが私のマシンの出力です:

launchctl limit maxfiles
maxfiles256無制限

sysctl kern.maxfiles
kern.maxfiles:12228

sysctl kern.maxfilesperproc
kern.maxfilesperproc:10240

私の質問は次のとおりです。

  1. maxfiles 256 from launchctl limit maxfilesはプロセスごとの制限ですか?
  2. maxfiles by "launchctl limit maxfiles"がkern.maxfilesおよびkern.maxfilesperprocと異なるのはなぜですか?
  3. アプリケーションからユーザーが手動で起動するアプリケーションには、どの制限(maxfiles 256またはkern.maxfilesperproc:1024)が適用されますか?
4
DenisL
  1. _maxfiles 256_から_launchctl limit maxfiles_はプロセスごとの制限ですか?

はい。 _launchctl limit maxfiles_は、getrlimit(2)によって報告されたプロセスごとのソフト制限とハード制限を出力します。そのマニュアルページには次のように記載されています。

リソース制限は、ソフト制限とハード制限として指定されます。 
ソフト制限を超えると、プロセスはシグナルを受信する場合があります(たとえば、
 cpu時間またはファイルサイズを超えた場合)が、con-
は許可されます。ハード制限に達するまで(またはリソース
制限を変更するまで)実行を続けます。

getrlimit(2)は、シェルの組み込みコマンドulimitが情報を取得する場所です。

  1. _launchctl limit maxfiles_が_kern.maxfiles_および_kern.maxfilesperproc_と異なるのはなぜですか?

_launchctl limit maxfiles_は、launchdがプロセスに課すプロセスごとのソフト制限とハード制限を報告します。 Launchedは、256のソフト制限と「無制限」のハード制限を課しているようです。つまり、カーネルではlaunchdではなく_kern.maxfilesperproc_によってのみ制限されます。

_kern.maxfiles_は、システム全体のファイル記述子の合計の制限です。すべてのプロセスで開いているすべてのファイルと、カーネルが独自の目的で開いているすべてのファイルの合計。

  1. アプリケーションからユーザーが手動で起動するアプリケーションには、どの制限(_maxfiles 256_または_kern.maxfilesperproc: 10240_)が適用されますか?

GUIからアプリを起動するユーザーが手動で起動したアプリケーションは、起動時に課せられる256のソフト制限と「無制限」のハード制限を継承するため、十分な空きファイル記述子があると仮定すると、ハード制限は実質的に_kern.maxfilesperproc_になります。システム全体が_kern.maxfiles_に達する前に、アプリが制限に達する可能性があるシステム。

プロセス(アプリ)は、システムコールを使用して、実行後にソフト制限を調整することもできます。したがって、256のソフト制限は起動時のデフォルトであり、アプリ/プロセスはすぐに独自のソフト制限を増やす可能性があります。

4
Spiff