私は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
ハード制限はカーネルによって維持され、ソフト制限はシェルによって強制されます。