Como defino um limite para o número de arquivos que o Linux pode abrir?


11

Eu pretendo executar um aplicativo Java usando nohup ... &. O limite deve se aplicar a comandos como este.


Mas isso causou um erro no meu programa java

Respostas:


7

A maioria dos sistemas usa PAM e possui pam_limitslimites de módulo configurados com base /etc/security/limits.conf. O limite por usuário para arquivos abertos é chamado nofile. Você pode configurá-lo para todos os usuários ou para um usuário ou grupo específico e pode definir um limite que o usuário pode substituir (limite flexível) e outro que somente a raiz pode substituir (limite fixo). A documentação e a limits.confpágina do manual têm os detalhes. Por exemplo, para aumentar o limite para 50000 para todos, insira esta linha /etc/limits.conf(a configuração entra em vigor quando você faz login):

* - nofile 50000

dentro de limits.conffazer * hard nofile 50000e / ou * soft nofile 50000. Não sei a diferença técnica entre duro e macio e sempre fiz as duas coisas.
ron

no SLES 11.4 usando o tcsh, por exemplo, é possível limit descriptors 50000alterar o valor na janela / sessão do terminal.
ron

@ron-` na segunda coluna define o limite flexível e o limite rígido. Você só precisa defini-los separadamente se desejar valores diferentes. Um limite flexível pode ser alterado a qualquer momento executando o ulimitcomando (chamado limitem csh). Um usuário sem privilégios nunca pode ultrapassar o limite máximo.
Gilles 'SO- stop be evil'

se eu definir apenas o valor máximo, o valor flexível permanece o padrão? se eu definir apenas soft e não hard, hard permanece o valor padrão ou inerentemente igual ao valor soft? Posso definir macio> difícil? O soft é o valor real que está em vigor? desculpe pelas perguntas.
ron

@ron O limite flexível é automaticamente limitado no limite rígido. Se você definir apenas o limite máximo, isso definirá o limite flexível para max (default_soft_limit, actual_hard_limit).
Gilles 'SO- stop be evil'

4

você pode adicionar fs.file-max = <your number>em /etc/sysctl.conf. Então reinicie.


cat / proc / sys / fs / file-max é 169203, mas ulimit -n é 1024

Não há necessidade de reiniciar. Apenas corra sysctl fs.file-max=123456. ( /etc/sysctl.confé lido no momento da inicialização por um script que chama sysctlo conteúdo.)
Gilles 'SO- stop be evil' (

3
ulimit -n

pode modificar as configurações por processo e

/proc/sys/fs/file-max

ou a variável sysctl chamada fs.file-maxpode ser usada para ler e definir o valor de todo o sistema


cat / proc / sys / fs / file-max é 169203, mas ulimit -n é 1024

1

Você pode usar ulimit para isso:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Embora você tenha certeza de que é absolutamente necessário abrir tantos identificadores de arquivo antes de recorrer a esses ajustes. Aumentar o número máximo de identificadores de arquivo apenas porque você esqueceu de executar um inputstream.close () em um loop apenas atrasará o problema subjacente.


1
Eu quero conectar-me a muitos clientes

1

Use ulimit (comando Bash - man bash ou encontre semelhante para o seu shell) por instância do programa. Não use limites globais do sistema se não souber o que está fazendo - possíveis DoS.


Em SLES 11,4 tenho posto nofileem limits.confser 100000 sucesso. Posso atestar que a configuração de um valor muito grande impediu o logon subsequente com o SSH e tive que inicializar a partir do dvd para corrigir esse valor no limits.conf para recuperar o sistema.
ron

0
vi ~/.bashrc

E adicione uma linha no final do arquivo

ulimit -n 169203
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.