Estou tentando aumentar o número máximo de arquivos abertos para o usuário atual
> ulimit -n
1024
Tento aumentar e falhar da seguinte maneira
> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted
Então, faço o que é natural e tento executar com permissão temporária, mas falho
> sudo ulimit -n 4096
sudo: ulimit: command not found
Questões
- Como aumentar ulimit?
- Por que isso está acontecendo?
Usando o Fedora 14
ulimit 4096
não funciona. Eu acho que-n
está correto. Como prova de conceito, funciona se eu primeirosudo su - root
(mas apenas muda para raiz).Respostas:
ulimit
é um shell embutido, não um comando externo. Ele precisa ser incorporado porque atua no próprio processo do shell, comocd
: os limites, como o diretório atual, são propriedade desse processo específico.sudo bash -c 'ulimit -n 4096'
funcionaria, mas alteraria o limite do processo bash invocadosudo
somente, o que não ajudaria.Existem dois valores para cada limite: o limite rígido e o limite flexível. Somente a raiz pode aumentar o limite rígido; qualquer pessoa pode diminuir o limite máximo, e o limite mínimo pode ser modificado em qualquer direção, com a única restrição de que não pode ser maior que o limite máximo. O limite flexível é o valor real que importa.
Portanto, é necessário organizar que todos os seus processos tenham um limite fixo para arquivos abertos de pelo menos 4096. Você pode manter o limite flexível em 1024. Antes de iniciar o processo que requer muitos arquivos, aumente o limite flexível. Em
/etc/security/limits.conf
, adicione as linhasonde
paislee
é o nome do usuário para o qual você deseja executar seu processo. No shell que inicia o processo para o qual você deseja um limite mais alto, executepara aumentar o limite flexível para o limite rígido.
fonte
sudo bash -c
sãosudo -i
que começa um shell de login esudo -s
whcih inicia um shell. As mesmas limitações se aplicam, mas isso pode ser útil em outras circunstâncias.sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"
. Mas ambosulimit -c 1024
eexec su $LOGNAME"
só afeta o shell criado porsudo
, então qual é a finalidade do comando?exec su $LOGNAME"
também não faz nada significativo para fazer uso do limite alterado. Estou muito confuso e me pergunto se estou perdendo alguma coisa.ulimit -Sn unlimited
não funciona na maioria das conchas. O método certo é ligarulimit -a
e depois chamarulimit -n <number>
onde <número é o limite máximo (a coluna da direita).abra o arquivo
/etc/security/limits.conf
e adicione a linha<user> soft nofile <value>
. para usar aulimit
alteração no usuário root e tente o mesmo.fonte