Como altero o número de limite de arquivos abertos no Linux? [fechadas]

194

Ao executar meu aplicativo, às vezes recebo um erro too many files open.

A execução ulimit -arelata que o limite é 1024. Como faço para aumentar o limite acima de 1024?

Edite os ulimit -n 2048 resultados em um erro de permissão.

John Meagher
fonte
veja também: unix.stackexchange.com/a/8949/231660
Guy Avraham
Acabei de passar por isso no Centos 7 (o mesmo no RHEL) e fiz uma postagem no blog, cobrindo-a porque tinha muitos problemas, mesmo com todas essas postagens: coding-stream-of-consciousness.com/2018/12/21/… . Geralmente, junto com os arquivos abertos, você precisa aumentar o nproc, que realmente reside em vários arquivos de configurações ... e se você usar systemd / systemctl que possui suas próprias configurações separadas. É meio louco.
precisa saber é o seguinte
Se você estiver usando VSCode no linux esta solução alternativa pode ajudar: stackoverflow.com/a/55027686/1190948
Juri Sinitson

Respostas:

153

Você sempre pode tentar fazer um ulimit -n 2048. Isso redefinirá apenas o limite do seu shell atual e o número especificado não deve exceder o limite máximo

Cada sistema operacional possui uma configuração de limite rígido diferente em um arquivo de configuração. Por exemplo, o limite de arquivo aberto no Solaris pode ser definido na inicialização em / etc / system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

No OS X, esses mesmos dados devem ser definidos em /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

No Linux, essas configurações geralmente estão no /etc/security/limits.conf.

Existem dois tipos de limites:

  • limites flexíveis são simplesmente os limites impostos atualmente
  • limites rígidos marcam o valor máximo que não pode ser excedido definindo um limite flexível

Os limites flexíveis podem ser definidos por qualquer usuário, enquanto os limites rígidos são alteráveis ​​apenas pela raiz. Limites são propriedade de um processo. Eles são herdados quando um processo filho é criado, portanto, os limites de todo o sistema devem ser definidos durante a inicialização do sistema nos scripts init e os limites do usuário durante o login do usuário, por exemplo, usando pam_limits.

Geralmente, há padrões definidos quando a máquina é inicializada. Portanto, mesmo que você possa redefinir seu ulimit em um shell individual, você pode achar que ele redefine o valor anterior na reinicialização. Você pode desejar grep seus scripts de inicialização para os comandos ulimit de existência, se desejar alterar o padrão.

hoyhoy
fonte
4
você pode me dizer como usar isso no windows?
Pritam
@hoyhoy Eu posso mudar isso como, 2048mas não como, 4500por quê? veja isto
alhelal
@GaneshKrishnan o que adicionar nos arquivos linux que você mencionou?
Aviral sanjay
O @Pritam Windows não possui nenhum ulimit. Você deve especificar o que está usando (por exemplo, WSL, Cygwin).
Melebius 19/11/19
99

Se você estiver usando Linux e recebeu o erro de permissão, precisará aumentar o limite permitido no /etc/limits.confou/etc/security/limits.conf arquivo (onde o arquivo está localizado depende da sua distribuição específica do Linux).

Por exemplo, para permitir que qualquer pessoa na máquina aumente seu número de arquivos abertos até 10000, adicione a linha ao limits.confarquivo.

* hard nofile 10000

Em seguida, efetue logout e logon no seu sistema e você poderá:

ulimit -n 10000

sem um erro de permissão.

Jonathan Stanton
fonte
6
NOTA: O curinga não se aplica ao rootusuário. Você precisa especificar root hard nofile 10000se deseja ajustar o rootlimite.
Joshua Pinter
1
@ JoshPinter Haha, eu passei as últimas 3 horas, mais ou menos, passando por todos os tutoriais sobre como alterar o arquivo ulimite finalmente descobri que estou logado como root. É por isso que eu continuava vendo o 1024 dentro ulimit -a. Troquei o cuidado selvagem e adicionei um *interior limits.conf. Tudo está bom agora, (estou usando as teclas ssh, não se preocupe: P) - Obrigado !!!
NiCk Newman
1
@NiCkNewman Estou feliz que você esteja rindo disso! Essa é uma boa característica em uma pessoa programador / sysops. Eu fiz a mesma coisa e não era tão jovial. Fico feliz que ajudou! :)
Joshua Pinter
SUPLEMENTO: Você pode encontrar também uma configuração neste dir: /etc/security/limits.d/.
Waldemar Wosiński
2
Abri o /etc/security/limits.conf pela primeira vez e notei que tudo está comentado por aí. Qual é o valor padrão de "hard nofile" então?
Ka3ak #
36

1) Adicione a seguinte linha a /etc/security/limits.conf

webuser hard nofile 64000

depois faça o login como usuário da web

su - webuser

2) Edite os dois arquivos a seguir para o usuário da web

anexar os arquivos .bashrc e .bash_profile executando

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Faça logoff, faça login novamente e verifique se as alterações foram feitas corretamente:

$ ulimit -a | grep open
open files                      (-n) 64000

É isso e eles boom, boom boom.

Vikrant Telkar
fonte
9
Se você alterar sua linha no limits.conf de 'hard' para 'soft', ele deverá se tornar o novo padrão e não exigir alterações nos perfis do bash.
precisa saber é o seguinte
Parece que você está repetindo etapas extras. Definir limites sozinho fará o mesmo que o perfil, mas em todas as sessões.
Eddie #
6

Se alguns de seus serviços estão se limitando a ulimits, às vezes é mais fácil colocar comandos apropriados no script init do serviço. Por exemplo, quando o Apache está relatando

[alerta] (11) Recurso temporariamente indisponível: apr_thread_create: não é possível criar o thread do trabalhador

Tente colocar ulimit -s unlimitedem /etc/init.d/httpd. Isso não requer uma reinicialização do servidor.

Sysadmin
fonte