Por que o número de arquivos abertos é limitado no Linux?

121

Agora, eu sei que:

  • Encontre o limite de arquivos abertos por processo: ulimit -n
  • Conte todos os arquivos abertos por todo o processo: lsof | wc -l
  • Obter o número máximo de arquivos abertos permitidos: cat /proc/sys/fs/file-max

Minha pergunta aqui é: por que haveria um limite de arquivos abertos no Linux?

    
por xanpeng 19.04.2012 / 10:35

3 respostas

77

A razão é que o sistema operacional precisa de memória para gerenciar cada arquivo aberto, e a memória é um recurso limitado - especialmente em sistemas embarcados.

Como usuário root, você pode alterar o número máximo de arquivos abertos por processo (via ulimit -n ) e por sistema (por exemplo, echo 800000 > /proc/sys/fs/file-max ).

    
por 19.04.2012 / 10:53
49

Observe que lsof | wc -l resume muitas entradas duplicadas (processos bifurcados podem compartilhar identificadores de arquivos, etc.). Esse número pode ser muito maior que o limite definido em /proc/sys/fs/file-max .

Para obter o número atual de arquivos abertos do ponto de vista do kernel do Linux, faça o seguinte:

cat /proc/sys/fs/file-nr

Exemplo: Este servidor tem 40096 de um máximo de 65536 arquivos abertos, embora o lsof relate um número muito maior:

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504
    
por 09.12.2013 / 17:26
16

Eu acho que é em grande parte por razões históricas.

Um descritor de arquivo Unix é um pequeno valor int , retornado por funções como open e creat , e passado para read , write , close e assim por diante.

Pelo menos nas primeiras versões do Unix, um descritor de arquivo era simplesmente um índice em uma matriz de estruturas de tamanho fixo por processo, em que cada estrutura contém informações sobre um arquivo aberto. Se bem me lembro, alguns sistemas antigos limitaram o tamanho desta tabela a 20 ou mais.

Sistemas mais modernos têm limites mais altos, mas mantiveram o mesmo esquema geral, em grande parte fora da inércia.

    
por 19.04.2012 / 20:55