Não é possível aumentar o limite de arquivos abertos após 4096 (Ubuntu)


34

Estou no Ubuntu 17.04. Tentando aumentar o limite de arquivos abertos e nenhuma das instruções que encontrei online estão funcionando. Eu posso ir até 4096, mas não posso passar disso.

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

Isso funciona. Isto não:

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

Parece ser por causa do limite rígido:

$ ulimit -Hn
4096

Eu tentei adicionar essas linhas ao /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

Também foi adicionada esta linha ao /etc/pam.d/common-session e /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

Desde que fiz isso, reiniciei meu computador. Mudanças no limits.conf parecem não afetar nada. O limite rígido ainda está parado em 4096, impedindo-me de subir mais. Como faço para aumentar meu limite de arquivos abertos?


Aqui estão algumas informações adicionais de configuração:

$ cat /proc/sys/fs/file-max 
1624668

Respostas:


56

OK, finalmente descobri isso. Os limites que eu estava definindo no /etc/security/limits.conf estavam sendo aplicados, mas não estavam sendo aplicados ao login gráfico. Isso pode ser verificado assim em uma janela do terminal:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Mais pesquisas me levaram a este relatório de bug , que me levou a apontar na direção certa. Para modificar o limite usado pelo shell de login, precisamos adicionar a seguinte linha ao /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Essa alteração funciona, mas afeta apenas o limite flexível. (Nos deixando limitados com um limite rígido de 4096 ainda.) Para afetar também o limite rígido, devemos modificar o /etc/systemd/system.conf com a mesma alteração.

As alterações que fiz no /etc/pam.d não foram necessárias. Pelo menos no Ubuntu, isso já está funcionando. Além disso, não foi necessário alterar as configurações para roote *no limits.conf. Alterar limites para mkasbergfoi suficiente, pelo menos para o meu caso de uso.


Em suma

Se você deseja aumentar o limite mostrado por ulimit -n, você deve:

  • Modifique /etc/systemd/user.conf e /etc/systemd/system.conf com a seguinte linha (isso cuida do login gráfico):

    DefaultLimitNOFILE=65535
    
  • Modifique o /etc/security/limits.conf com as seguintes linhas (isso cuida do login que não seja da GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Reinicie o computador para que as alterações entrem em vigor.


2
DefaultLimitNOFILE=65535fez o truque. Mas por que /etc/security/limits.conf não funciona?
Suvitruf diz Restabelecer Monica

6
O login da GUI usa systemd, que aparentemente possui sua própria configuração ( /etc/systemd/system.conf) que é independente da configuração normal para sessões de terminal ( /etc/security/limits.conf). Não sei o suficiente sobre o systemd para saber por que foi implementado dessa maneira.
Mkasberg

1
@Suvitruf porque é ignorado em um sistema systemd . Estou postando uma resposta.
Marc.2377

1
Só quero salientar que os limites para o rootusuário não podem ser especificados *ou especificadores de grupo. rootliteral deve ser especificado explicitamente.
Petr Javorik

2
Isso funciona para mim, após uma reinicialização .
Shihe Zhang

14

Não há necessidade de alterar nada no /etc/security/limits.confarquivo, ele será ignorado se você estiver usando o systemd.

(reproduzindo uma resposta modificada para outra pergunta na rede ...)

Uma alternativa para quem prefere não editar o padrão /etc/systemd/system.confe os /etc/systemd/user/confarquivos:

  1. crie um novo arquivo /etc/systemd/system.conf.d/limits.confcom este conteúdo:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. executar systemctl daemon-reexeccomo root

  3. sair e entrar novamente

  4. verifique seu novo limite com ulimit -n.

Consulte a página de systemd-system.confmanual para obter detalhes.


No meu sistema Ubuntu 18.10, o arquivo em questão está em /etc/systemd/system.conf. Fazer a alteração lá parece ter feito o truque, obrigado.
Stephen Kennedy

1
Fazer o logout para mim não funcionou (Ubuntu 18.04), mas reiniciar fez o trabalho. Solução muito elegante, obrigado.
stann1 11/04

0

Usando o Ubuntu 17.04, obtive o limite descrito:

user@paresh.com:~$ ulimit -Hn
4096

Eu poderia abaixá-lo usando ulimit, mas não aumentá-lo, assim como a pergunta descreve. ulimitmanual descreve:

somente a raiz pode aumentar o limite rígido.

Então, eu tentei definir um limite mais alto /etc/security/limits.confassim:

user hard nofile 9999

e um novo login como ssh localhost -l userme deu o novo limite:

user@paresh.com:~$ ulimit -Hn
9999

Espero que isso funcione para você também.


0
  1. edite /etc/systemd/system/sonar.service

  2. adicione essas duas linhas em Serviço

[Serviço]

LimitMEMLOCK = infinito

LimitNOFILE = 65535

  1. systemctl daemon-reload
  2. sonar de reinicialização systemctl

isso funciona para mim.


0

TL; DR Senti a necessidade de concentrar as respostas, para que sejam mais fáceis de encontrar. Levei anos para reunir todas as peças para que funcionassem corretamente ...

Existem 2 locais a serem considerados.

  1. Sessão da GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    ou melhor aqui:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. ambiente shell

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    ou melhor aqui:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Após alterar as configurações nos arquivos acima, reinicie e verifique os limites com: ulimit -n -Hn -Sn

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.