Como faço para alterar o número de arquivos abertos no Linux?

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

Executando ulimit -a informa que o limite é 1024. Como aumentar o limite acima de 1024?

Editar ulimit -n 2048 resulta em um erro de permissão.

   

Você sempre pode tentar fazer um ulimit -n 2048 . Isso só redefinirá o limite do seu shell atual e o número que você especificar não deverá 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 arquivos abertos no Solaris pode ser definido na boot do / 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 em /etc/security/limits.conf.

Existem dois tipos de limites:

  • limites suaves são simplesmente os limites atualmente aplicados
  • 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 podem ser alterados apenas pelo usuário root. Limites são uma 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 boot do sistema nos scripts init, e os limites do usuário devem ser definidos 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 descobrir que ele é reconfigurado para o valor anterior na reboot. Você pode querer grep seus scripts de boot para os comandos ulimit de existência se quiser alterar o padrão.

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

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

* hard nofile 10000

Em seguida, faça o logout e relogine para o seu sistema e você deve ser capaz de fazer:

ulimit -n 10000

sem um erro de permissão.

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

 webuser hard nofile 64000 

então faça o login como webuser

 su - webuser 

2) Editar seguindo dois arquivos para o webuser

Anexe o arquivo .bashrc e .bash_profile executando

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

3) Efetue logout, 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.

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

[alert] (11) Recurso temporariamente indisponível: apr_thread_create: não é possível criar thread de trabalho

Tente colocar ulimit -s unlimited em /etc/init.d/httpd . Isso não requer uma reboot do servidor.