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フラグは、「単一ユーザーが使用できるプロセスの最大数」として定義されます。 task_structの要素には、ジョブを作成したユーザーのuidが含まれています。 task_structにジョブが追加/削除されるたびに、uidあたりの数が維持され、増減されます。したがって、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共有メモリ空間のスレッド。

ulimit -u次に、特定の時間にユーザーが持つことができるプロセス全体を表す3番目のパラメータを使用します。上記のコマンドで返される出力は次のとおりです。63203。これは、特定の時点でユーザーが作成したすべてのプロセスに対して、ユーザーが以下を持つことができることを意味します。63203プロセスが実行中です。

仮想事例

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

これで、ユーザーが特定の時点で実行できるプロセスの数を決定する必要があります。これはドキュメントで確認できます。/etc/security/limits.confしたがって、既定では、上記のようにファイルには2つの設定があります。ここ

ソフトリミット同じ警告するそしてハード制限実際の最大制限。たとえば、以下は、学生グループのすべてのプロセスが50を超えることを防ぎ、プロセスが30の場合に警告を表示します。

@student        hard    nproc           50
@student        soft    nproc           30

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

関連情報