Por que um ulimit -u muito maior que o número de processos que estou executando causa problemas?

2

Estou executando 200 processos, mas um ulimit -u de 400 parece causar algum problema:

$ ps -A | wc -l
199
$ ulimit -u 400
zsh: fork failed: resource temporarily unavailable

Estou confuso. Por que o limite está sendo atingido?

edit : inicialmente ulimit -u

$ ulimit -u
47334
    
por Owen 02.09.2016 / 20:23

1 resposta

6

No Linux, os threads contam para o ulimit -u count, mas não aparecem normalmente com ps -A . Você precisa adicionar o sinalizador L .

por exemplo, na minha máquina:

% ps -A | wc -l 
124
% ps -AL | wc -l
155

Podemos ver que há mais 31 processos em execução; estes são tópicos, normalmente escondidos da vista.

Com o java e outros aplicativos altamente segmentados, pode ser fácil executar mais threads / processos do que você pensa. Seu valor ulimit -u precisa levar isso em consideração.

Isso pode inesperadamente atingir pessoas que executam muitos aplicativos java em sistemas RedHat, nos quais ela vem, por padrão, com uma configuração ulimit :

% cat /etc/security/limits.d/20-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited
    
por 02.09.2016 / 20:52

Tags