Eu tenho um longo processo de execução no Debian. Em algum momento, lance um erro:
Muitos arquivos abertos.
Corrida:
ulimit -a
mostra:
abrir arquivos (-n) 1024
Desejo aumentar o número de arquivos abertos em 2 vezes. Após execução
ulimit -n 2048
o limite está ativo até o final da minha sessão, o que não é aplicável à tarefa.
Como posso aumentar permanentemente o número de arquivos abertos?
fonte
Há também um "total máximo" de arquivos abertos definidos no kernel, você pode verificar a configuração atual com:
E defina um novo valor com:
Se você deseja manter a configuração entre as reinicializações, adicione
para
Para verificar o uso máximo atual do arquivo:
fonte
0
, isso significa apenas que o número de identificadores de arquivo alocados corresponde exatamente ao número de identificadores de arquivos usados.49152 0 18446744073709551615
. Não entendo por que as duas primeiras colunas não somam a terceira. E se tenho 1,8 trilhão de trilhões disponíveis, não vejo como os usei todos.Como outros já disseram, você pode aplicar limites específicos por usuário ou grupo no /etc/security/limits.conf.
Nota: ulimit -n mostra o limite flexível.
irá mostrar o limite máximo.
Isso torna a saída ulimit -a e ulimit -n bastante confusa se, por exemplo, você estava aumentando o número de arquivos de 1024 para 4096, pois esperaria ver a saída do limite rígido, mas ainda está vendo 1024, que é o software mais fácil. limite.
Além disso, lembre-se de que esses limites são impostos por login, portanto, faça login novamente em um novo shell e verifique suas alterações, não espere que elas sejam propagadas para logins existentes.
fonte
Esteja ciente de que se você executar seu processo, definindo ulimits no /etc/security/limits.conf não funcionará. Se você, por exemplo, deseja aumentar o limite de arquivos abertos para o tomcat para 20000, precisará adicioná-los às linhas em
/etc/default/tomcat
:Eu encontrei este problema no debian 6.0.4 Para outros processos, as respostas dadas devem ajudar.
fonte
Depende de como você inicia seu processo de longa execução. Se ele foi iniciado no momento da inicialização (via scripts /etc/rcX.d/*), você deve fazer uma chamada ulimit no script de inicialização, pois o limite padrão é definido pelo kernel e não pode ser ajustado sem recompilá-lo.
Usar
/etc/security/limits.conf
poderia funcionar se você ocron
iniciar, por exemplo, com uma entrada como esta:Isso deve funcionar porque /etc/pam.d/cron habilita o pam_limits.so.
fonte
Você pode adicionar isso em /etc/security/limits.conf
salve e reinicie.
fonte
Um comando muito bom é,
ulimit -n
mas há um problema com muitas conexões e muitos arquivos abertos:fonte
ulimit -a
, nãoulimit -n
.