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 sudo
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 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.
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).