Quais são as ramificações de aumentar o número máximo de descritores de arquivos abertos?

1

O Ubuntu parece ter um limite padrão de 1024 descritores de arquivos abertos. Nginx estava reclamando durante alguns testes de carga que eu estava fazendo que o número máximo foi atingido e o servidor basicamente estava inutilizável.

Estou testando um serviço que terá que sustentar 2-3K solicitações por segundo, e cada solicitação estará salvando em um arquivo (ou potencialmente em outra loja como o mysql etc.). Esses arquivos serão eliminados em x minutos a partir do servidor.

Se eu executar ulimit -n e aumentar o número de descritores de arquivos abertos, quais ramificações isso tem? Isso faz com que o / s separe mais memória para gerenciar descritores de arquivos, ou existe mais?

    
por codecompleting 14.11.2011 / 16:20

2 respostas

2

Eu achei que algumas pesquisas simples produziriam uma resposta, mas fui frustrado. Passei algum tempo olhando a fonte do Linux e encontrei file_table.c . files_init na parte inferior do arquivo de origem é onde a tabela de arquivos abertos é inicializada e tem este comentário:

/*
 * One file with associated inode and dcache is very roughly 1K.
 * Per default don't use more than 10% of our memory for files. 
 */ 

a lógica nessa função configura o sistema max_files para o maior tamanho máximo solicitado (NR_FILES) ou 10% da memória do sistema. Aparentemente todo arquivo aberto consome cerca de 1K de memória.

No entanto, isso não responde à questão de quanto espaço é necessário para gerenciar os descritores de arquivos não utilizados. Eu acho que é um número muito pequeno por descritor de arquivo, apenas alguns bytes.

Não creio que haja qualquer desvantagem real em definir o número máximo de arquivos para um número muito grande, até (2 ^ 20 deste stack overflow question No entanto, se cada arquivo aberto levar 1K você obviamente ficará sem memória do sistema muito antes de atingir esse limite.

Meu conselho é ir em frente e definir o máximo de arquivos abertos do seu sistema para um número muito maior. Se cada arquivo aberto consumir cerca de 1K, então 128.000 arquivos abertos consumirão apenas cerca de 128MB da RAM do seu sistema. Isso não deve ser um grande problema em um sistema moderno com muitos GB de memória RAM.

Isenção de responsabilidade: Eu baseei tudo isso no meu conhecimento pessoal de sysadmin e em algumas leituras muito superficiais do código-fonte do Linux. Eu não sou hacker de kernel.

    
por 15.11.2011 / 04:53
0

em sistemas operacionais do tipo unix, os descritores de arquivos são usados para praticamente qualquer coisa que leia ou grave, dispositivos io, pipes, soquetes etc. Normalmente, você modifica esse limite ao usar oracle ou servidores da web. A razão pela qual o limite é baixo é porque os números vieram de quando os usuários compartilharam o sistema. O único dano real seria se você tivesse poucas quantidades de memória, mas normalmente você pode definir isso para 30k para servidores de alto desempenho.

    
por 15.11.2011 / 05:16