Qual é a diferença entre limites rígidos e flexíveis no ulimit?
Para o número de arquivos abertos, tenho um limite flexível de 1024 e um limite rígido de 10240. É possível executar programas que abrem mais de 1024 arquivos. Para que serve o limite flexível?
open-files
ulimit
daniel kullmann
fonte
fonte
ulimit -n
? Tente executar um shell com um valor muito baixo (bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
). Qual é o resultado?Respostas:
Um limite rígido só pode ser aumentado pela raiz (qualquer processo pode reduzi-lo). Portanto, é útil para segurança: um processo não raiz não pode ultrapassar um limite rígido. Mas é inconveniente que um processo não raiz não possa ter um limite inferior ao de seus filhos.
Um limite flexível pode ser alterado pelo processo a qualquer momento. Portanto, é conveniente, desde que os processos cooperem, mas não é bom para segurança.
Um caso de uso típico para limites flexíveis é desativar dumps principais (
ulimit -Sc 0
), mantendo a opção de ativá-los para um processo específico que você está depurando ((ulimit -Sc unlimited; myprocess)
).O
ulimit
comando shell é um invólucro em torno dasetrlimit
chamada do sistema, e é aí que você encontrará a documentação definitiva.Observe que alguns sistemas podem não implementar todos os limites. Especificamente, alguns sistemas não suportam limites por processo nos descritores de arquivo (o Linux suporta); se o seu não, o comando shell pode ser um não-op.
fonte
ulimit -m
,RLIMIT_RSS
) é um exemplo de limite que não é mais eficaz no Linux. O limite de memória virtual (ulimit -v
,RLIMIT_AS
) funciona, no entanto.setrlimit
(na extensão permitida pelo limite rígido, a menos que seja executado como raiz, é claro). A maioria dos programas não possui um comando que permita ao usuário fazer isso, mas você pode tentar se conectar ao programa com um depurador e emitir umasetrlimit
chamada, ou no Linux, você pode chamarprlimit
(pelo qual não conheço nenhum shell Utilitário).prlimit
utilitário de shell.O limite rígido é para fins de segurança. Para um usuário não raiz, ele só pode diminuir o limite máximo do limite definido atualmente; ele não pode aumentá-lo. Aumentar o limite rígido pode ser feito apenas pelo usuário root (ou talvez com privilégio sudo, não tenho certeza disso). O que um usuário não raiz pode fazer é escolher um limite (chamado limite flexível) que pode estar no intervalo [0, limite fixo] para seus processos. É o limite flexível que é visto e levado em consideração pelos processos.
fonte