Por que o arquivo manipula um recurso escasso?

6

Eu sinto que cada tutorial que eu leio sobre gerenciamento de recursos nas configurações do servidor começa afirmando que as alças de arquivos são um recurso escasso, e devemos, portanto, manter a lista de arquivos abertos no mínimo.

Mas eu realmente não entendo porque eles são um recurso escasso. Não é um descritor de arquivo apenas um número? Quanto estado o Linux, por exemplo, precisa rastrear por arquivo aberto? O número de arquivos abertos é limitado devido a problemas de memória ou algo completamente diferente?

    
por beta 05.03.2014 / 10:32

3 respostas

3

Arquivos abertos são gerenciados por uma estrutura na memória do kernel que manipula a referência de inode na memória.
Eles também rastreiam o modo de abertura do arquivo, o local no arquivo, bem como um cache.

AFAIK na maioria dos sistemas UNIX / Linux, essa estrutura não pode ser trocada, e como o tamanho do armazenamento é geralmente maior em uma ordem de magnitude ou dois que a memória, é virtualmente impossível ter uma quantidade significativa de arquivos no armazenamento abra ao mesmo tempo.
Além disso, nem todas as plataformas têm um deamon de sincronização ativo, portanto, as informações escritas podem, às vezes, ser mantidas somente no cache até que uma sincronização ou fechamento seja executado.

Além disso, há muitos identificadores de arquivos em uso sem você, como desenvolvedor, ciente deles, como bibliotecas carregadas dinamicamente e binários de arquivos / intérpretes do programa.

    
por 05.03.2014 / 15:25
2

Algumas delas são apenas porque como você disse, é "apenas um número" - e se você quiser ser capaz de usar um número maior do que o que você pode encaixar em um (digamos ) um tipo de dados inteiro, então você deve usar um tipo de dados maior para descritores all ... por exemplo. 2 bytes por descritorID, em vez de apenas 1 byte - e dobrando o tamanho de todos os seus descritores, em breve sangrarão memória, memória que poderia ser melhor usada para aplicativos do que apenas para o sistema operacional.

Há também muitas outras informações associadas aos descritores, bem como a necessidade de manter listas das quais estão em uso e quais são gratuitas - há limites para o tamanho dessas estruturas de dados para permanecerem eficazes.

    
por 05.03.2014 / 10:54
2

De acordo com este tutorial , você pode obter o número máximo de identificadores de arquivos abertos de uma chamada para cat /proc/sys/fs/file-max . No meu sistema, recebo um valor de 797736, que é bem grande. Um rápido ps -e|wc -l me diz que tenho cerca de 200 processos em execução, o que significa que qualquer programa pode abrir cerca de 4.000 identificadores de arquivos.

No entanto, esse é um valor global - você pode ser mais específico usando ulimit. ulimit -a informa que posso ter um máximo de 1024 identificadores de arquivos abertos, o que ainda é um número muito grande, embora nada seja comparado ao máximo absoluto. Mas isso pode ser aumentado se você precisar e, portanto, não é um limite difícil .

Então, minha conclusão? Alças de arquivo não são um recurso escasso. Os tutoriais só querem ter certeza de que você só abre arquivos enquanto precisa deles, porque se você deixar as alças abertas, isso pode interferir em outros processos que também podem estar tentando trabalhar com os arquivos, especialmente se você os estiver bloqueando quando abri-los .

    
por 05.03.2014 / 10:54