Eu tenho dois servidores CentOS 5 com especificações quase idênticas. Quando eu faço o login e o faço ulimit -u
, em uma máquina recebo unlimited
e na outra recebo 77824
.
Quando executo um cron como:
* * * * * ulimit -u > ulimit.txt
Eu obtenho os mesmos resultados ( unlimited
, 77824
).
Estou tentando determinar onde eles estão definidos para que eu possa alterá-los. Eles não estão definidas em nenhum dos meus perfis ( .bashrc
, /etc/profile
, etc.). Isso não afetaria o cron de qualquer maneira) nem em /etc/security/limits.conf
(que está vazio).
Eu vasculhei o Google e até cheguei a ponto de fazê-lo grep -Ir 77824 /
, mas nada apareceu até agora. Não entendo como essas máquinas podem ter sido predefinidas com limites diferentes.
Na verdade, estou me perguntando não para essas máquinas, mas para uma máquina diferente (CentOS 6) que tem um limite de 1024
, que é muito pequeno. Preciso executar tarefas cron com um limite mais alto e a única maneira de saber como definir isso é na própria tarefa cron. Tudo bem, mas eu prefiro configurá-lo em todo o sistema para que não seja tão hacky.
Obrigado por qualquer ajuda. Parece que deve ser fácil (NÃO).
EDIT - RESOLVIDO
Ok, eu descobri isso. Parece ser um problema no CentOS 6 ou talvez na configuração da minha máquina. Na configuração do CentOS 5, posso definir /etc/security/limits.conf
:
* - nproc unlimited
e isso atualizaria efetivamente as contas e os limites do cron. No entanto, isso não funciona na minha caixa do CentOS 6. Em vez disso, devo fazer:
myname1 - nproc unlimited
myname2 - nproc unlimited
...
E as coisas funcionam como esperado. Talvez a especificação UID funcione, mas o curinga (*) definitivamente NÃO ESTÁ aqui. Estranhamente, os curingas funcionam para o nofile
limite.
Eu ainda adoraria saber de onde os valores padrão realmente vêm, porque, por padrão, esse arquivo está vazio e não pude ver por que eu tinha padrões diferentes para as duas caixas do CentOS, que tinham hardware idêntico e eram do mesmo provedor .
/etc/security/limits.d/
?Respostas:
Esses limites "padrão" são aplicados por:
init
processo),fork(2)
momento),setrlimit(2)
).Os processos dos usuários normais não podem atingir limites rígidos.
O kernel do Linux
No momento da inicialização, o Linux define limites padrão para o
init
processo, que são herdados por todos os outros processos (filhos). Para ver esses limites:cat /proc/1/limits
.Por exemplo, o padrão do kernel para o número máximo de descritores de arquivo (
ulimit -n
) era 1024/1024 (flexível, rígido) e foi aumentado para 1024/4096 no Linux 2.6.39.O número máximo padrão de processos dos quais você está falando está limitado a aproximadamente:
para x86 arquiteturas (pelo menos), mas distribuições por vezes, mudar os valores de kernel padrão, então verificar o seu código-fonte do kernel para
kernel/fork.c
,fork_init()
. O limite "número de processos" é chamado RLIMIT_NPROC lá.PAM
Geralmente, para garantir a autenticação do usuário no login, o PAM é usado junto com alguns módulos (consulte
/etc/pam.d/login
).No Debian, o módulo PAM responsável pela definição de limites é aqui:
/lib/security/pam_limits.so
.Essa biblioteca lerá sua configuração de
/etc/security/limits.conf
e/etc/security/limits.d/*.conf
, mas mesmo que esses arquivos estejam vazios, pam_limits.so pode usar valores codificados que você pode verificar no código-fonte.Por exemplo, no Debian, a biblioteca foi corrigida para que, por padrão, o número máximo de processos (
nproc
) seja ilimitado e o número máximo de arquivos (nofile
) seja 1024/1024:Portanto, verifique o código-fonte do módulo PAM do CentOS (procure RLIMIT_NPROC).
No entanto, observe que muitos processos não passam pelo PAM (normalmente, se não forem iniciados por um usuário conectado, como daemons e talvez tarefas cron).
fonte
/etc/initscript
- "um local conveniente para ajustar os limites por processo", configurável via/etc/sysconfig/ulimit
./proc/1/limits
) desde a versão 1.1.4 (lançada em 2011).No RHEL6 (CentOS6), "máx. Processos do usuário" é definido como 1024 por padrão.
Você pode alterar este valor no arquivo:
Consulte https://bugzilla.redhat.com/show_bug.cgi?id=432903 se você quiser reclamar sobre isso :)
fonte
Quando você verificou os limites, estava usando o usuário root para fazer isso?
Na página de
limits.conf
manual:O uso de nomes de usuário explícitos resolveria o problema nesse caso.
fonte
limits.conf
arquivo está vazio (como olimits.d
diretório).Informações sobre isso são terríveis na internet, eis um arquivo limits.conf que eu criei para o debian linux, mostrando todas as opções possíveis e seus limites máximos "seguros", alterando de acordo.
Esses são os valores mais altos que você pode definir, algumas coisas são resolvidas, ativar essas causas faz com que você entre em erro e não consiga entrar no console, modifique as opções comentadas por sua conta e risco, mas você não deve (o padrão é ilimitado na maioria)
Espero que isso seja útil para alguém, pois não consegui encontrar essas informações em nenhum lugar; há 4 horas de pesquisa nesse arquivo.
fonte
kernel / fork.c
Em tamanho de segmento de 64 bits, 8192
Agora eu recebo o total em kb na divisão por 4
Agora eu tenho o número de páginas
O resultado final é
Dessa maneira, você obtém o parâmetro thread-max e o limite do processo do usuário padrão é metade
ulimit da raiz
fonte
Parece ser /etc/security/limits.conf
http://ss64.com/bash/limits.conf.html
fonte
Há mais uma possibilidade de que a configuração do "noproc" não esteja funcionando durante a configuração no /etc/security/limits.conf.
Há mais um arquivo que substitui sua configuração /etc/security/limits.d/90-nproc.conf.
Aqui * config substituirá o que você definir no arquivo de configuração anterior. Idealmente, você define sua configuração neste arquivo.
fonte