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

118

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 um aplicativo java ecplise 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 desta forma;

soft nofile 4096
hard nofile 4096

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

Mas isso não funciona 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 mudá-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 devido à 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 e sem sorte!

    
por iCode 11.07.2012 / 04:06

3 respostas

118

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, alimentei 'ulimit' para 'ulimit -S', por isso, 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 no limits.conf

Deve haver QUATRO colunas, 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

Tags