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


25

私はoracleユーザーのnofile値を調整しています/etc/security/limits.confが、その動作について質問があります:すべてのプロセスでnofileユーザーが開くことができるファイルの総数を制限するか、ユーザーが持つことができるファイルの総数を制限しますプロセスごとに開いていますか?

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

oracle                  hard    nofile                  65536

回答:


23

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

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

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

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


逆に、それは異なるセッションが異なる制限のセットを持つことができることを意味しますか?
CMCDragonkai

1
@CMCDragonkaiはい、たとえばlimit.conf、セッションが開いている時間の間に変更された場合、または異なる制限(ルートを除いて小さくする必要がある)がに設定されている場合.profile
ジル「SO-悪であるのをやめる」

1
@laimison実行中のすべてのプロセスを反復処理し、prlimit --pid $pidそれぞれで実行すると、アクティブなセッションの制限を効果的に変更できます。反復中に一部のプロセスが分岐した場合、数回実行する必要があることに注意してください。
ジル「SO-悪であるのをやめなさい」

1
@laimisonいいえ。ユーザーには2つのプロセスAとBのみがありRLIMIT_NPROC、Aに2、Bに3に設定されているとします。Bはもう1つのプロセスをフォークできますが、Aはできません。
ジル「SO-悪であるのをやめ

1
@laimison Bの親で制限を2に設定し、分岐後にBで制限を変更しない場合、Bの制限は2になります。Bの親で制限を2に設定したが、Bで制限を上げる場合、またはBをフォークする前にBの親で制限を3に設定し、Bをフォークした後に2に設定すると、Bの制限は3に設定されます。重要な制限は、制限ではなくfork()を呼び出すプロセスの制限ですそのプロセスの親または他のプロセスで。
ジル「SO-悪であるのをやめる」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.