Como eu aumento o limite de arquivos abertos para um usuário não-root?

122

Isso está acontecendo no Ubuntu Release 12.04 (preciso) Kernel Linux 3.2.0-25-virtual de 64 bits

Estou tentando aumentar o número de arquivos abertos permitidos para um usuário. Isso é para o meu aplicativo java eclipse, onde o limite atual de 1024 não é suficiente.

De acordo com os posts que encontrei até agora, eu deveria poder colocar linhas em

/etc/security/limits.conf assim:

soft nofile 4096
hard nofile 4096

para aumentar o número de arquivos abertos permitidos para todos os usuários.

Mas isso não está funcionando para mim e acho que o problema não está relacionado a esse arquivo.

Para todos os usuários, o limite padrão é 1024, independentemente do que está em /etc/security/limits.conf (reinicializei após alterar esse arquivo)

$ ulimit -n
1024

Agora, apesar das entradas em /etc/security/limits.conf, não posso aumentar isso:

$ ulimit -n 2048

-bash: ulimit: arquivos abertos: não é possível modificar o limite: Operação não permitida A parte estranha é que eu posso mudar o limite para baixo , mas não posso alterá-lo para cima - mesmo para voltar a um número que está abaixo do limite original:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

-bash: ulimit: open files: cannot modify limit: Operation not permitted

Como root, posso alterar esse limite para o que quiser, para cima ou para baixo. Ele nem parece se importar com o limite supostamente para todo o sistema em / proc / sys / fs / file-max

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

Mas mesmo que eu comece o eclipse para ser executado como root, meu aplicativo ainda falha por causa da exceção "Too Many Open File"!

Até agora, não encontrei nenhuma maneira de aumentar o limite de arquivos abertos para um usuário não raiz.

Como devo fazer isso corretamente? Eu olhei para vários outros posts, mas sem sorte!

    
por iCode 11.07.2012 / 04:06

3 respostas

120

O comando ulimit por padrão altera os limites HARD, que você (um usuário) pode diminuir, mas não pode aumentar.

Use a opção -S para alterar o limite SOFT , que pode variar de 0 - { HARD }.

Na verdade, eu aliasizei ulimit a ulimit -S , então o padrão é usar os limites brandos o tempo todo.

alias ulimit='ulimit -S'

Quanto ao seu problema, você está perdendo uma coluna nas suas entradas em /etc/security/limits.conf .

Deve haver QUATRO colunas, mas a primeira está faltando no seu exemplo.

* soft nofile 4096
* hard nofile 4096

A primeira coluna descreve a quem o limite deve ser aplicado. '*' é um caractere curinga, ou seja, todos os usuários. Para aumentar os limites de root , você precisa inserir explicitamente 'root' em vez de '*'.

Você também precisa editar /etc/pam.d/common-session* e adicionar a seguinte linha ao final:

session required pam_limits.so
    
por lornix 11.07.2012 / 04:16
15

Se você usar limites físicos e físicos por usuário, poderá usar algo como:

su USER --shell /bin/bash --command "ulimit -n"

para verificar se suas configurações estão funcionando para esse usuário específico ou não.

    
por Jeroen Teeuwen 12.09.2013 / 12:34
4

Eu tenho muitos problemas para fazer isso funcionar.

Usar o seguinte permite atualizá-lo, independentemente da sua permissão de usuário.

sudo sysctl -w fs.inotify.max_user_watches=100000
    
por Layke 10.07.2015 / 17:41