PIDが400,000を超えると確認されます。理由は何ですか?これは何かが間違っていることを意味しますか?

PIDが400,000を超えると確認されます。理由は何ですか?これは何かが間違っていることを意味しますか?

今日、私のプロセスIDが400,000(例:449624)で非常に高いことを確認しました。私は走っていたときにps -ef | moreこれを見つけました。これは正常ですか、それとも問題があることを示していますか?それ以外の場合、スクリプトは正常に実行されます。

私はRedhat 7.3 x64ビットを使用しています。

私が気づいたもう一つのことは、Redhat 7.2もあり、pidがそれほど高くなく、最新のOSでのみ可能であるということです。なぜですか?これはOSに関連していて正常であることを意味しますか?

kernel_pid_max私のものにはそのようなものはありませんsysctl.conf。私は猫を走り/proc/sys/kernel/pid_max、それを得た458752

ベストアンサー1

起動時に、カーネルはpid_max使用可能なCPUの数に基づいてデフォルト値を調整します。数値が小さい場合は、一般的な32768が選択されます。そうでない場合、計算は次のようになります(ここに示されている3.10カーネルはRHELに似ていますが、いくつかの変更を除けば最近のLinuxカーネルと同じです)。

include/linux/threads.h:

/*
 *これはプロセスに割り当てられるデフォルトの最大PIDを制御します。
 */
#PID_MAX_DEFAULT定義(CONFIG_BASE_SMALL?0x1000:0x8000)

0x8000 = 32768 は、使用可能な CPU スレッドが 32 未満のシステムで一般的に使用される値です。

それから:

#PIDS_PER_CPU_DEFAULT 1024定義

その後、この値を使用してkernel/pid.c:

int pid_max = PID_MAX_DEFAULT;

そして〜の後:

    /* CPUの数に応じてデフォルト値と最小pid_maxを調整します*/
    pid_max = min(pid_max_max, max_t(int, pid_max,
                PIDS_PER_CPU_DEFAULT * num_possible_cpus()));
    pid_max_min = max_t(int, pid_max_min,
                PIDS_PER_CPU_MIN * num_possible_cpus());
    pr_info("pid_max: デフォルト: %u 最小値: %u\n", pid_max, pid_max_min);

したがって、OPの観点から、これは合計458752/1024 = 448個の使用可能な同時スレッドを意味します。かなり多いです。他のシステムにはCPU/コア/スレッドなどが多くない場合があるため、デフォルト値は低くなりますpid_max

おすすめ記事