/proc/sys/kernel/pid_max
の違いを理解してください/proc/sys/kernel/threads-max
。答えに良い説明があります
pid_max、ulimit -u、thread_maxの違いを理解する:
/proc/sys/kernel/pid_max
特定の時間に実行できるプロセスの最大数とは関係ありません。実際、これはカーネルが割り当てることができる最大の数値プロセス識別子です。Linuxカーネルでは、プロセスとスレッドは同じです。カーネルはこれを同じ方法で処理します。これらはすべてtask_structデータ構造のスロットを占有します。一般的に言えば、スレッドは他のプロセスとリソースを共有するLinuxのプロセスです(スレッドグループIDも共有します)。 Linuxカーネルのスレッドは、スケジューラに関する限り、概して概念的な構成です。
カーネルがスレッドとプロセスを大幅に区別しないことを理解したので、
/proc/sys/kernel/threads-max
実際にはtask_structデータ構造に含まれる要素の最大数を示すことがより理解されます。これは、プロセスリスト(またはタスクリストとも呼ばれる)を含むデータ構造です。
ただし、実際には両方ともホスト上の同時スレッドの最大数を制限します。私が知っているのは、この数字がpid_max
合計の最小値になることですthreads-max
。それでは、なぜ両方が必要ですか?
私が知っている限り、デフォルトpid_max
は次のとおりです。可能なCPUの数に応じてマシンのデフォルト値はthreads-max
以下から派生します。ページ数。しかし、どちらも同じ効果を持っているので、Linuxは2つの最小値である1つの値しか持てませんか?
答え1
これらの設定は同じ効果を持ちません。
threads-max
同時にインスタンス化できるプロセスの数を制限します。pid_max
プロセスに割り当てられた制限識別子
threads-max
task_struct
インスタンスに最終的に割り当てられるメモリ量を制限します。pid_max
pidがローリングされるタイミングを決定します。
制約はpid_max
メモリ消費に影響を与えず(わかっている限り、多数のPIDがテキストとして保存されていない限り)、新しいPIDに達すると検索がより困難になるため、最終的にパフォーマンスに影響を与える可能性がありますpid_max
。値が低いpid_max
ほど、特定の期間内にPIDを再利用する可能性も高くなります。