我检查了两个linux系统,都是64位的,但是它们的PID_MAX是不同的。
在一个系统上
cat /proc/sys/kernel/pid_max
32768
而在其他方面,则是
cat /proc/sys/kernel/pid_max 65536
来自过程手册页。
proc/sys/kernel/pid_max 该文件(Linux 2.5 中的新文件)指定 PID 环绕的值(即该文件中的值比最大 PID 大 1)。该文件的默认值 32768 会产生与早期内核相同的 PID 范围。在 32 位平台上,32768 是 pid_max 的最大值。在 64 位系统上,pid_max 可以设置为最大 2^22 的任何值(PID_MAX_LIMIT,大约 400 万)。
请注意,这两个系统都具有相同的 Linux 内核。
现在,我的问题是哪些因素会导致 pid_max 的变化?先感谢您。
答案1
如果我没记错的话,默认值是根据最大潜在 CPU 数量(rhel)计算的。
在每个系统上运行此命令
dmesg | grep -i smp.*allow
或者,管理员之前可能更改了限制?
答案2
难道您正在访问 docker 或开放的 VZ 容器而不是真正的 Linux 机器?在这种情况下,主机可以将 PID_MAX 限制为任何值。这是一个相对较新的功能,称为 Cgroup pid 控制器。它是一种反分叉炸弹解决方案,可以防止容器无休止地分叉进程,从而导致主机在很短的时间内无法使用。