web-dev-qa-db-ja.com

limits.conf値はプロセスごとに適用されますか?

Oracleユーザー用に/etc/security/limits.confnofile値を調整しています。その動作について質問があります。ユーザーが開くことができるファイルの総数をnofileで制限しますallそのプロセスの数、またはユーザーが開くことができるファイルの総数を制限していますかeachそのプロセスの数?

具体的には、次の使用法の場合:

Oracle                  hard    nofile                  65536
25

limits.confのほとんどの値¹は、ulimitシェルコマンドまたは setrlimit システムコールで設定できる制限です。それらはプロセスのプロパティです。制限は、プロセスごとに個別に適用されます。特に、各プロセスは最大nofileのオープンファイルを持つことができます。ユーザーのプロセスによって累積される開いているファイルの数に制限はありません。

nproc制限は、ユーザーのすべてのプロセスを合計するという点で、少し特殊なケースです。それでもなお、プロセスごとに適用されます。プロセスがforkを呼び出して新しいプロセスを作成するとき、プロセスのeuidに属するプロセスの数がプロセスのRLIMIT_NPROC値よりも大きい場合、呼び出しは拒否されます。

limits.conf man page は、制限がセッションに適用されることを説明しています。つまり、セッション内のすべてのプロセスには、これらの同じ制限があります(これらのプロセスのいずれかによって変更されない限り)。これは、セッション内のプロセス全体で合計が行われることを意味するわけではありません(これは、オペレーティングシステムが追跡するものでさえありません。セッションの概念がありますが、それよりも細かく、たとえば、各X11アプリケーションは終了する傾向があります独自のセッションで起動します)。それが機能する方法は、ログインプロセス自体にいくつかの制限を設定し、それらがすべての子プロセスに継承されることです。

¹ 例外はmaxloginsmaxsysloginsおよびchrootで、ログインプロセスの一部として適用され、ログインを拒否または影響します。