ulimit PICKLE: "Operação não permitida" e "Comando não encontrado"


15

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

  1. Como aumentar ulimit?
  2. Por que isso está acontecendo?

Usando o Fedora 14


Responder novamente ao comentário excluído: ulimit 4096não funciona. Eu acho que -nestá correto. Como prova de conceito, funciona se eu primeiro sudo su - root(mas apenas muda para raiz).
31512 paislee


Respostas:


17

ulimité um shell embutido, não um comando externo. Ele precisa ser incorporado porque atua no próprio processo do shell, como cd: 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 invocado sudosomente, 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 linhas

paislee hard nofile 4096
paislee soft nofile 1024

onde 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, execute

ulimit -Sn unlimited

para aumentar o limite flexível para o limite rígido.


1
Alternativas a sudo bash -csão sudo -ique começa um shell de login e sudo -swhcih inicia um shell. As mesmas limitações se aplicam, mas isso pode ser útil em outras circunstâncias.
Bram

Obrigado. Posso fazer algumas perguntas relacionadas? A outra resposta e postar stackoverflow.com/a/17483998/156458 e unix.stackexchange.com/a/238413/674 e unix.stackexchange.com/a/169035/674 recomendam o uso sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Mas ambos ulimit -c 1024e exec su $LOGNAME" só afeta o shell criado por sudo, 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.
Tim

Observe que ulimit -Sn unlimitednão funciona na maioria das conchas. O método certo é ligar ulimit -ae depois chamar ulimit -n <number>onde <número é o limite máximo (a coluna da direita).
schily

3

abra o arquivo /etc/security/limits.confe adicione a linha <user> soft nofile <value>. para usar a ulimitalteração no usuário root e tente o mesmo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.