Como aumentar o limite de arquivos abertos para um usuário não root?

144

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

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

De acordo com os posts que eu 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 estiver 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 alterar o limite para baixo , mas não para cima - mesmo para voltar para um número 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 eu quiser, para cima ou para baixo. Nem parece se importar com o supostamente limite de 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 o eclipse seja executado como root, meu aplicativo ainda trava por causa da exceção "Muitos arquivos abertos"!

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

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

iCode
fonte
6
Além disso, observe que, depois de editar /etc/security/limits.conf, talvez seja necessário sair e fazer login novamente antes de poder usar o novo limite máximo. Fiz isso e fiquei perplexo ao ulimit -Hsmostrar 1000 quando acabei de aumentá-lo para 1000000! Então eu saí e voltei, e o ulimit mostrou a nova quantia.
Cerin
Para a sessão da GUI, você também pode achar importante (Ubuntu 16+) esse tópico .
Waldemar Wosiński

Respostas:

142

Por ulimitpadrão, o comando 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 de SOFT , que pode variar de 0 a { HARD }.

Eu, na verdade alias ulimitpara ulimit -S, de modo que os padrões para os limites suaves o tempo todo.

alias ulimit='ulimit -S'

Quanto ao seu problema, está faltando uma coluna nas entradas /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 OMS que o limite deve ser solicitado. '*' é um curinga, significando todos os usuários. Para aumentar os limites da raiz , você deve digitar explicitamente 'raiz' 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
lornix
fonte
11
Como altero o limite máximo para o número máximo de descritores de arquivos abertos? Meu problema é que preciso permitir que meu aplicativo Eclipse tenha o arquivo aberto que desejar, mas o limite de 4096 não é suficiente e desejo configurá-lo para o mais alto possível, talvez 500000. Minha configuração no limits.conf é como você mencionou com a estrela e ainda assim o limite de Hard não está se movendo.
iCode 11/07
11
Bem, você descobriu que o valor de / proc / sys / fs / file-max era 188.897 ... Então, eu diria que seu limite superior está entre 188.000 (permitido) e 500.000 (não permitido). Confunde a mente de que você tem algo que requer mais de 65000 arquivos abertos simultaneamente. Uau. Geralmente isso é feito com ferro grande. Eu suspeitaria de uma programação, um equívoco. (Com todo o respeito, por favor)
lornix
4
foi isso: sessão necessária pam_limits.so, obrigado!
Letalman
13
No começo, perdi o curinga no final /etc/pam.d/common-session*e acabei de editar common-session, e mesmo depois de uma reinicialização, não funcionou. Porém, após adicionar a mesma linha (para pam_limits.so) a common-session-noninteractive, ulimit -no novo valor foi exibido após um novo login (não é necessário reiniciar). FWIW Eu estava tentando alterar o limite para raiz (apenas).
Lambart 26/06
11
verifique também se o valor é diferente se estiver conectado como root. superuser.com/questions/1200539/…
Robbo_UK
20

Se você usar limites flexíveis e rígidos 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.

Jeroen Teeuwen
fonte
5

Tenho muitos problemas para fazer isso funcionar.

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

sudo sysctl -w fs.inotify.max_user_watches=100000
Layke
fonte
4
Tentei fazer isso desde que eu estou tendo mesmo problema, mas não funcionou$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster