Entendendo a diferença entre pid_max, ulimit -u e thread_max

5

Estou tentando entender os processos do Linux. Eu tenho confusão sobre os termos pid_max , ulimit -u e thread_max . Qual é exatamente a diferença entre esses termos? Alguém pode me esclarecer as diferenças?

    
por Ramesh 13.06.2014 / 00:41

2 respostas

11

Vamos entender a diferença entre um processo e um segmento. De acordo com o este link,

The typical difference is that threads (of the same process) run in a shared memory space, while processes run in separate memory spaces.

Agora, temos o parâmetro pid_max , que pode ser determinado conforme abaixo.

cat /proc/sys/kernel/pid_max

Portanto, o comando acima retorna 32,768 , o que significa que posso executar 32.768 processos simultaneamente em meu sistema, que podem ser executados em espaços de memória separados.

Agora, temos o parâmetro threads-max , que pode ser determinado conforme abaixo.

cat /proc/sys/kernel/threads-max

O comando acima me retorna a saída como 126406 , o que significa que posso ter 126406 threads em um espaço de memória compartilhada.

Agora, vamos considerar o terceiro parâmetro ulimit -u , que diz o total de processos que um usuário pode ter em um determinado momento. O comando acima me retorna a saída como 63203 . Isso significa que, para todos os processos que um usuário criou em um determinado momento, o usuário pode ter 63203 processos em execução.

Caso hipotético

Portanto, supondo que haja dois processos sendo executados simultaneamente por dois usuários e cada processo esteja consumindo bastante memória, ambos os processos usarão com eficácia o limite de usuário 63203 nos processos. Então, se esse for o caso, os dois usuários terão efetivamente usado todo o 126406 threads-max size.

Agora, preciso determinar quantos processos um usuário pode executar a qualquer momento. Isso pode ser determinado a partir do arquivo /etc/security/limits.conf . Portanto, existem basicamente duas configurações neste arquivo, conforme explicado em aqui .

Um limite soft é como um aviso e hard limit é um limite máximo real . Por exemplo, seguir impedirá que qualquer pessoa no grupo de alunos tenha mais de 50 processos, e um aviso será dado em 30 processos.

@student        hard    nproc           50
@student        soft    nproc           30

Os limites rígidos são mantidos pelo kernel, enquanto os limites flexíveis são impostos pelo shell.

    
por 13.06.2014 / 00:41
5

Desculpe, a resposta aceita é má informação em várias frentes.

/ 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 do PROCESSO que pode ser atribuído pelo kernel.

No kernel do Linux, um processo e um thread são um o mesmo. Eles são tratados da mesma maneira pelo kernel. Ambos ocupam um espaço na estrutura de dados task_struct. Um encadeamento, por terminologia comum, está no Linux, um processo que compartilha recursos com outro processo (eles também compartilharão um ID de grupo de encadeamentos). Um encadeamento no kernel Linux é basicamente uma construção conceitual no que se refere ao planejador.

Agora que você entende que o kernel em grande parte não diferencia entre um encadeamento e um processo, deve fazer mais sentido que / proc / sys / kernel / threads-max seja realmente 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 eles podem ser chamados, tarefas.

ulimit é, como o nome indica, um limite por usuário. O sinalizador -u é definido como "O número máximo de processos disponíveis para um único usuário". Um elemento de task_struct contém o uid do usuário que criou a tarefa. Uma contagem per-uid é mantida e incrementada / decrementada toda vez que uma tarefa é adicionada / removida da task_struct. Então, ulimit -u indica o número máximo de elementos (processos) que um usuário em particular pode ter dentro de task_struct a qualquer momento.

Espero que isso resolva as coisas.

    
por 14.02.2017 / 23:41