web-dev-qa-db-ja.com

Linux /etc/security/limits.confの説明

誰かがlimits.confのアイテムについての詳細を提供することを説明できますか(またはソースを知っていますか)?マニュアルページには詳細は記載されていません。

たとえばそれは言う:

rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

これらの違いは何ですか?彼らはどんな価値をとることができますか?デフォルトは何ですか?

いくつかの項目は明白ですが、以下のより良い説明(デフォルト値、範囲、実際の意味など)はどこにありますか?

data 
maximum data size (KB) 

fsize 
maximum filesize (KB) 

memlock 
maximum locked-in-memory address space (KB) 

cpu 
maximum CPU time (minutes) 

Nice 
maximum Nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] 

CPUを超過するとどうなりますか?プロセスは殺されましたか? 1つのプロセスのみ、またはユーザー全体がCPUの使用を禁止されていますか?これは1つのセッション用ですか、それとも1分ごとの最大時間用ですか?

私は答えを見つけようとしましたが、見つけることができるのは、詳細がほとんど提供されていない1つのmanページだけです。

9
myforwik
rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

なぜこれらが異なるのですか?

Linuxには、さまざまなクラスのプロセススケジューラがあります。デフォルトのもの(CFQ)は基本的に、実行したい各プロセスに等しい時間スライスを与え、実行可能なタスクをキューに入れ、全員が平均して同じ時間待機するようにします。このルールにはいくつかの例外がありますが、それが基本的な考え方です。

スケジューラのもう1つのクラスは、リアルタイムスケジューラです。リアルタイムは少し異なり、実行可能なタスクを公平なキュースキームにキューイングします。リアルタイムプロセスは、プロセスで必要になるとすぐにCPU時間を取得します。これにより、CPUから実行中のプロセスが排除され、「リアルタイム' 処理する。

彼らはどのような値を取ることができますか?

「優先順位」が行うことは、プロセスの素晴らしさを変更して、ログイン時にメインプロセスが特定の素晴らしさから始まり、作成した子プロセスも同じ素晴らしさから始まります。

これは、他の競合するプロセスを優先してスケジュールされる可能性を高める効果があり、ユーザーエクスペリエンスは、nicenessの値が低いほど応答性/対話性が高くなり、nicenessが高くなった場合は応答性/対話性が低くなります。

たとえば、通常のログインユーザーがサービス可能なデーモンよりも優先度を低くすることや、rootが他のものよりもログインの優先度を高くすることが重要な場合があります。

リアルタイムに関しては、競合は「rtprio」フィールドで処理されます。 2つのリアルタイムタスクがあり、どちらも実行したい場合は、「rtprio」値を使用して、優先順位を最初に選択するプロセスを決定します。 rtprioが高いほど、優先度の高いタスクが生成されます。

Limits.confでこれを設定すると、rootが値を設定しなくても、リアルタイムタスクを特定の優先順位バンドに設定できます。これは、リアルタイムスケジューラを使用して実行するように設定されていないタスクには影響しません。

「Nice」値は「rtprio」と同じようにする必要がありますが、標準のCFQスケジューリング用です。私はそれを試したことはありません。 PAMがこれらの制限をそのNice vauleに設定するときに生成される初期プロセスを設定します。通常のユーザーは、rootに設定することなく、そのNiceレベル以上に移動できます。明示的に再利用しない場合は、そのログインからシェルから生成されたすべてのプロセスが、最初に作成された親プロセスからlimits.confに設定されているNice値を継承することを意味します。

デフォルトは何ですか?

「デフォルト」の制限-技術的には、すべてがpid 1に設定されています。明示的に設定しない限り、リソース制限は親プロセスから継承されます。制限が定義されていないか、オーバーライドされていない場合、initからの継承デフォルトです。

その他の値

data 
maximum data size (KB) 

プロセスが初期化されると、プロセスがメモリにコピーされるときに「データセグメント」と呼ばれるメモリが割り当てられます。これは、グローバルからのスペース、おそらくヒープから割り当てられた他の初期化されたデータとメモリが存在する場所です。制限は、プロセスが取得できる最大割り当て量を制御します。

Malloc()がデータを格納するためにデータセグメントを過剰に使用することはほとんどないため、この制限に達することはほとんどありません。

fsize 
maximum filesize (KB) 

これは文字通り、そのユーザーと同じようにファイルに書き込むことができる最大サイズを設定します。

memlock 
maximum locked-in-memory address space (KB) 

アプリケーションが取得したほぼすべてのメモリは「解放可能」です。それは交換することができます。メモリがロックされたメモリはスワップ可能ではなく、常駐します。この値は厳密に制御されています。メモリシステムが不足してスワッピングが引き起こされる可能性があるためです。通常、セキュリティアプリケーション(ページがスワップされることは決してなく、スワップパーティションから読み取り可能になる)で役立ちます。

cpu 
maximum CPU time (minutes) 

これは、プロセスがCPUで消費できる合計時間を表します。この値を超えるプロセスは強制終了されます。これは、プロセスが開始されてから経過した時間と同じではないことに注意してください。つまり、プロセスのCPU使用率が100%の場合、CPU時間制限が1分の場合、消費に1分かかりますが、プロセスが50%の使用率を使用した場合、2分かかります。

CPUを超過するとどうなりますか?

プロセスには、プロセスを終了するkillシグナルSIGXCPUが送信されます。これは、親プロセスによってキャッチされ、そこで処理されます。

CPUの使用から、1つのプロセスのみまたはユーザー全体が除外されますか?

参照されているほぼすべての制限は、プロセスごとに処理されます。 CPU時間を含みます。そうではないもの私は信じていますログインの総数とそのユーザーによるプロセスの総数。

制限付きのその他の問題点は次のとおりです。

  • Maxプロセスには、軽量スレッドの数が含まれます。
  • RSS制限は何もせず、何年もの間、設定する意味がありません。
18
Matthew Ife

クイックアンサーはいい答えなので、ここに行きます。

  • 優先度の最小値と最大値をschedtool -rで見つけます。そして
  • 現在の制限をulimit -aでクエリします。

同じ値を持つ場合でも、ソフト制限とハード制限の両方を設定することを忘れないでください。私のテストでは、これがulimitコマンドの違いを示す唯一のものでした。

これがお役に立てば幸いです。

1
drumfire

これは_pam_limits_モジュール用です... setrlimit(2)sysctl(8)の値です。私の検索ではハードリミットは明らかになりませんでしたが、引用されたmanページでいくつか説明があります。

1
vonbrand