私はoracleユーザーのnofile
値を調整しています/etc/security/limits.conf
が、その動作について質問があります:すべてのプロセスでnofile
ユーザーが開くことができるファイルの総数を制限するか、ユーザーが持つことができるファイルの総数を制限しますプロセスごとに開いていますか?
具体的には、次の使用法の場合:
oracle hard nofile 65536
私はoracleユーザーのnofile
値を調整しています/etc/security/limits.conf
が、その動作について質問があります:すべてのプロセスでnofile
ユーザーが開くことができるファイルの総数を制限するか、ユーザーが持つことができるファイルの総数を制限しますプロセスごとに開いていますか?
具体的には、次の使用法の場合:
oracle hard nofile 65536
回答:
のほとんどのlimits.conf
値¹は、ulimit
シェルコマンドまたはsetrlimit
システムコールで設定できる制限です。それらはプロセスのプロパティです。制限はプロセスごとに独立して適用されます。特に、各プロセスは最大でnofile
ファイルを開くことができます。ユーザーのプロセスによって累積されるオープンファイルの数に制限はありません。
このnproc
制限は、ユーザーのすべてのプロセスを合計するという点で、少し特殊なケースです。それでも、プロセスごとに適用さfork
れます。プロセスが新しいプロセスを作成するために呼び出したときに、そのプロセスのeuidに属するプロセスの数がプロセスのRLIMIT_NPROC
値よりも大きい場合、呼び出しは拒否されます。
limits.conf
manページには限界がセッションに適用されることを説明しています。つまり、セッション内のすべてのプロセスには、これらの同じ制限があります(これらのプロセスのいずれかによって変更されない限り)。セッションのプロセスに対して合計が行われることを意味するものではありません(オペレーティングシステムが追跡するものでさえありません。セッションの概念はありますが、それよりもきめ細かいです。たとえば、各X11アプリケーションは終了する傾向があります)独自のセッションで)。それが機能する方法は、ログインプロセスがそれ自体にいくつかの制限を設定し、それらがすべての子プロセスに継承されることです。
¹ 例外はmaxlogins
、maxsyslogins
およびでchroot
、これらはログインプロセスの一部として適用され、ログインを拒否または影響します。
limit.conf
、セッションが開いている時間の間に変更された場合、または異なる制限(ルートを除いて小さくする必要がある)がに設定されている場合.profile
。
prlimit --pid $pid
それぞれで実行すると、アクティブなセッションの制限を効果的に変更できます。反復中に一部のプロセスが分岐した場合、数回実行する必要があることに注意してください。
RLIMIT_NPROC
、Aに2、Bに3に設定されているとします。Bはもう1つのプロセスをフォークできますが、Aはできません。