pid_max、ulimit -u、thread_max の違いを理解する

pid_max、ulimit -u、thread_max の違いを理解する

Linux プロセスを理解しようとしています。それぞれの用語pid_max、、ulimit -uがわかりませんthread_max

これらの用語の違いは正確には何でしょうか? 誰か違いを明確に説明してもらえますか?

答え1

申し訳ありませんが、受け入れられた回答はいくつかの面で誤った情報です。

/proc/sys/kernel/pid_max一度に実行できるプロセスの最大数とは関係ありません。これは、カーネルによって割り当てられる最大の数値プロセス識別子です。

Linux カーネルでは、プロセスとスレッドは同じものです。カーネルでは、どちらも同じように処理されます。どちらも task_struct データ構造のスロットを占有します。一般的な用語では、スレッドは Linux では別のプロセスとリソースを共有するプロセスです (スレッド グループ ID も共有します)。Linux カーネルのスレッドは、スケジューラに関する限り、主に概念的な構成です。

カーネルがスレッドとプロセスをほとんど区別しないことがわかったので、/proc/sys/kernel/threads-maxデータ構造 task_struct に含まれる要素の最大数が実際に何であるかがより理解できるはずです。これは、プロセス、またはタスクと呼ばれるもののリストを含むデータ構造です。

ulimit は、その名前が示すように、ユーザーごとの制限です。フラグ-uは、「1 人のユーザーが使用できるプロセスの最大数」として定義されます。task_struct の要素には、タスクを作成したユーザーの uid が含まれます。uid ごとのカウントは、task_struct にタスクが追加または削除されるたびに維持され、増加または減少します。つまり、ulimit -u特定のユーザーが任意の時点で task_struct 内に持つことができる要素 (プロセス) の最大数を示します。

それですべてが明らかになることを願います。

答え2

プロセスとスレッドの違いを理解しましょう。これリンク、

一般的な違いは、スレッド (同じプロセス) は共有メモリ空間で実行されるのに対し、プロセスは個別のメモリ空間で実行されることです。

これで、pid_max以下のように決定できるパラメータができました。

cat /proc/sys/kernel/pid_max

上記のコマンドは32,768つまり、私は実行できる32,768私のシステムでは、別々のメモリ空間で同時に実行できるプロセスがあります。

これで、threads-max以下のように決定できるパラメータができました。

cat /proc/sys/kernel/threads-max

上記のコマンドは次のような出力を返します。126406つまり私は126406共有メモリ空間内のスレッド。

さて、3番目のパラメータulimit -uは、ユーザーが特定の時間に持つことができるプロセスの合計数を示します。上記のコマンドは、次のような出力を返します。63203これは、ユーザーが作成したすべてのプロセスに対して、ユーザーがその時点で63203実行中のプロセス。

仮定のケース

したがって、2つのプロセスが2人のユーザーによって同時に実行され、各プロセスがメモリを大量に消費していると仮定すると、両方のプロセスが効果的にメモリを使用します。63203プロセスのユーザー制限を超えています。その場合、2人のユーザーが実質的にプロセス全体を使い果たすことになります。126406 threads-maxサイズ。

ここで、ユーザーが任意の時点で実行できるプロセスの数を決定する必要があります。これはファイルから決定できます。/etc/security/limits.confしたがって、このファイルには基本的に2つの設定があります。ここ

ソフト制限警告そしてハードリミット実際の上限たとえば、次のコードを実行すると、学生グループ内のユーザーが 50 を超えるプロセスを持つことが禁止され、30 プロセスになると警告が表示されます。

@student        hard    nproc           50
@student        soft    nproc           30

ハード制限はカーネルによって維持され、ソフト制限はシェルによって適用されます。

関連情報