引导时,内核会根据pid_max
可用的CPU数量来调整默认值。当数字低时,选择通常的32768。否则,计算如下所示(此处显示的3.10内核与RHEL相似,但除了一些变化之外,对于任何最新的Linux内核都是相同的):
include/linux/threads.h
:
/ *
*这控制分配给进程的默认最大pid
* /
#定义PID_MAX_DEFAULT(CONFIG_BASE_SMALL?0x1000:0x8000)
0x8000 = 32768是在可用线程少于32个的系统上使用的常规值。
然后:
#定义PIDS_PER_CPU_DEFAULT 1024
这些值然后用于kernel/pid.c
:
int pid_max = PID_MAX_DEFAULT;
及以后:
/ *凹凸默认值和基于cpus数量的最小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
。
kernel_pid_max
,sysctl.conf
因为它应该存在kernel.pid_max
。