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


9

誰かが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を超過するとどうなりますか?プロセスは殺されましたか?CPUの使用が禁止されているプロセスは1つだけですか、それともユーザー全体ですか?これは1つのセッション用ですか、それとも毎分最大時間用ですか?

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


ruteはLinux Administrationの優れた入門書です。limits.confについての詳細はあまり説明されていませんが、この情報の場所を示しています-rute.2038bug.com/index.html.gz
symcbean

回答:


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

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

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

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

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

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

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

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

「nice」値は「rtprio」と同じようにする必要がありますが、標準のCFQスケジューリング用です。私はそれを試したことはありません。PAMがこれらの制限を適切な値に設定するときに生成される初期プロセスを設定します。通常のユーザーは、rootに設定することなく、その適切なレベル以上に移動できます。明示的に再利用しない場合は、そのログインからシェルから生成されたすべてのプロセスが、最初に作成された親プロセスから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でプロセスが消費できる合計時間を表します。この値を超えるプロセスは強制終了されます。これは、プロセスが開始されてから経過した時間と同じではないことに注意してください。IEのCPU時間制限が1分の場合、プロセスのCPU使用率が100%の場合は消費に1分かかりますが、プロセスの使用率が50%の場合は消費に2分かかります。

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

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

1つのプロセスのみ、またはユーザー全体がCPUの使用を禁止されていますか?

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

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

  • Maxプロセスには、軽量スレッドの数が含まれます。
  • RSS制限は何もせず、何年にもわたって存在せず、設定しても意味がありません。

1

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


1

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.