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