Eu entendo a diferença entre /proc/sys/kernel/pid_max
e /proc/sys/kernel/threads-max
. Há uma boa explicação na resposta para
Entendendo as diferenças entre pid_max, ulimit -u e thread_max :
/proc/sys/kernel/pid_max
não tem nada a ver com o número máximo de processos que podem ser executados a qualquer momento. É, na verdade, o IDENTIFICADOR numérico máximo de PROCESSO que pode ser atribuído pelo kernel.No kernel Linux, um processo e um thread são a mesma coisa. Eles são tratados da mesma maneira pelo kernel. Ambos ocupam um slot na estrutura de dados task_struct. Um thread, pela terminologia comum, é no Linux um processo que compartilha recursos com outro processo (eles também compartilharão um ID de grupo de threads). Um thread no kernel do Linux é em grande parte uma construção conceitual no que diz respeito ao escalonador.
Agora que você entende que o kernel não diferencia amplamente entre um thread e um processo, deve fazer mais sentido que
/proc/sys/kernel/threads-max
seja na verdade o número máximo de elementos contidos na estrutura de dados task_struct. Qual é a estrutura de dados que contém a lista de processos, ou como podem ser chamados, tarefas.
No entanto, efetivamente, ambos limitam o número máximo de threads simultâneos em um host. Este número será - no meu entender - o mínimo de pid_max
e threads-max
. Então, por que ambos são necessários?
Entendo que o valor padrão pid_max
é baseado no número de CPUs possíveis da máquina, enquanto o padrão threads-max
é derivado do número de páginas . Mas como ambos têm o mesmo efeito, o Linux não poderia ter apenas um valor que fosse o mínimo de ambos?
Essas configurações não têm o mesmo efeito:
threads-max
limita o número de processos que podem ser instanciados simultaneamentepid_max
limita o identificador atribuído aos processosthreads-max
limita a quantidade de memória que pode ser alocada paratask_struct
instâncias.pid_max
determina quando os pids são lançados (se houver).A restrição
pid_max
não afeta o consumo de memória (até onde eu saiba, a menos que muitos pids acabem armazenados como texto) e pode acabar afetando o desempenho, pois é mais difícil encontrar um novo pid depois de alcançadopid_max
. Um valor mais baixopid_max
também aumenta a probabilidade de reutilização do pid dentro de um determinado período de tempo.