/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 就不能只有一个值是两者中的最小值吗?
这些设置不具有相同的效果:
threads-max
限制可以同时实例化的进程数量pid_max
限制分配给进程的标识符threads-max
限制最终分配给task_struct
实例的内存量。pid_max
确定 pid 何时滚动(如果有)。约束
pid_max
不会影响内存消耗(据我所知,除非大量 pid 最终存储为文本),并且最终可能会影响性能,因为一旦达到新的 pid 就很难找到pid_max
。较低的值pid_max
还会增加给定时间段内 pid 重用的可能性。