Por que não é possível obter mais de 4096 arquivos abertos máximos para usuários não raiz?

13

Não consigo aumentar o nofilelimite para usuários não raiz no Ubuntu 14.04, apesar de seguir todas as respostas do StackExchange relacionadas a esse problema. Até agora eu tenho:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

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

Reinicializado, logado e:

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

ainda alguma forma parece ser um limite de 4096 max para usuários não-root.

Coma de cafeína
fonte
Estou tendo exatamente o mesmo problema no Ubuntu 16.10 desktop. Não importa o que eu tento, os limites são ou 1024 ou 4096.
NathanAldenSr

Respostas:

13

Usando o Ubuntu 14.04, obtive o limite descrito:

user@notebook:~$ ulimit -Hn 4096  

Eu poderia baixá-lo usando ulimit, mas não aumentá-lo, assim como a pergunta descreve. Como o manual do ulimit 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@notebook:~$ ulimit -Hn 9999

Espero que isto funcione para você também.

TomTomTom
fonte
Obrigado TomTomTom. Eu já tenho essa alteração no /etc/security/limits.d/custom.conf. Eu tentei colocá-lo diretamente no /etc/security/limits.conf como você sugeriu, e ainda recebo "bash: ulimit: arquivos abertos: não é possível modificar o limite: operação não permitida".
Cafeína Coma
Eu - apenas acho - um dos dois motivos pelos quais ele não funciona:
TomTomTom 12/15/15
1
Demorei muito para editar o comentário incompleto. Aqui vamos nós: eu - acho que - um dos dois motivos pelos quais isso não funciona para você: 1. /etc/security/limits*não é lido pelo seu mecanismo de login - por um motivo ainda desconhecido. 2. Seu limite fixo é definido para 4096 em outro local e "somente a raiz pode aumentar ...". Você pode verificar seus perfis como .bashrc(dependendo do seu shell) ou /etcoutros locais onde limites podem ser definidos, como find /etc | grep -e ulimit -e 4096 -e nofile. BTW: você tentou ssh? E: você mudou /etc/ssh/sshd.confpara evitar o PAM por algum motivo?
TomTomTom 12/03
Sim - todo o login é via ssh. Desabilitei o UsePAM - vários guias recomendam isso como parte de permitir apenas logins baseados em chave ssh. Vou tentar ativá-lo temporariamente, apenas para ver se esse é o problema. Obrigado!
Caffeine Coma #
Afaik, PAM é o que deve ler /etc/security/limits*- você pode tentar habilitar o PAM apenas para verificar isso. Vou tentar desabilitar o PAM para ver qual a diferença que faz e relatarei os resultados. --- Sim! é isso aí! Com o PAM desativado, meu limite também é 4096, embora seja definido como 9999 pol /etc/security/limits.conf.
TomTomTom 13/03/2015
4

este Acho que artigo trata do seu problema.

Basicamente, você deve usar o comando ulimit para aumentar os recursos disponíveis.

Por exemplo:

Use o seguinte comando para exibir o número máximo de descritores de arquivos abertos:

cat /proc/sys/fs/file-max

Para ver os valores físicos e físicos, emita o comando da seguinte maneira:

# ulimit -Hn
# ulimit -Sn

Para ver os valores físicos e físicos do usuário httpd ou oracle, emita o comando da seguinte maneira:

# su - username

Para corrigir o número máximo de arquivos, você pode aumentar o número máximo de arquivos abertos, definindo um novo valor na variável do kernel / proc / sys / fs / file-max da seguinte maneira (faça o login como raiz):

# sysctl -w fs.file-max=100000

O comando acima força o limite para 100000 arquivos. Você precisa editar o /etc/sysctl.confarquivo e colocar a seguinte linha para que, após a reinicialização, a configuração permaneça como está. Para fazer isso, acrescente uma diretiva de configuração da seguinte maneira:

fs.file-max = 100000

Salve e feche o arquivo. Os usuários precisam fazer logoff e logon novamente para que as alterações tenham efeito ou apenas digite o seguinte comando:

# sysctl -p

Verifique suas configurações com o comando:

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

ou:

# sysctl fs.file-max

O procedimento acima define os limites de descritores de arquivos (FD) para todo o sistema. No entanto, você pode limitar httpd(ou qualquer outro usuário) o usuário a limites específicos editando o /etc/security/limits.confarquivo editando /etc/security/limits.confe configurando os limites da seguinte forma:

httpd soft nofile 4096
httpd hard nofile 10240

Em seguida, verifique-os:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Se você tiver o problema em outras distribuições Linux, verifique /etc/pam.d/logine verifique se está pam_limits.sohabilitado, por exemplo

session required pam_limits.so
Brooke Fogg-Wolfe
fonte
2
Oi Brooke. Infelizmente, eu já tentei as sugestões desse artigo. Embora o 'ulimit -Hn' fosse novo para mim; imprime 4096, o limite em que continuo esbarrando.
Caffeine Coma
0

Se for um serviço, você pode tentar definir o limite em /etc/systemd/system/{ServiceName}.serviceaddLimitNOFILE=65536

Maicon Santana
fonte
O Ubuntu 14.04 não usa o systemd por padrão.
Number5
Ubuntu 16.04, Tomcat 8 funcionou para mim
Arjang