Por que limitar o número de arquivos abertos e processos em execução no Linux?

14

Como não tenho muito conhecimento sobre o funcionamento interno do sistema operacional, por que temos limites para o número máximo de arquivos abertos e processos em execução no Linux?

Eu apreciaria se alguém pudesse me ajudar a entender.

aka_learner
fonte

Respostas:

16

Isto é principalmente por razões históricas. Nos mainframes antigos do Linux, muitos usuários se conectavam e usavam os recursos do mainframe. Obviamente, era necessário limitar e, como operações como identificadores de arquivo e processos foram incorporados ao kernel, ficou limitado por lá. Também ajuda a limitar ataques como a bomba dos garfos . Uma defesa contra a bomba de forma usando limites de processo é mostrada aqui .

Ele também ajuda a manter serviços complexos e daemons em cheque, não permitindo a retirada de garfos e abertura de arquivos, semelhante ao que a bomba de forquilha tenta fazer.

Também devem ser observados itens como a quantidade de RAM e CPU disponíveis e o fato de que um contador de 32 bits pode apenas fazer referência a tanta coisa (apenas 4294967296 entradas que podem ser contadas por um contador de 32 bits), mas esses limites estão longe acima daqueles geralmente definidos por programadores e administradores de sistema. De qualquer forma, muito antes de você ter processos 4294967296, sua máquina provavelmente teria sido reinicializada, conforme planejado ou quando começou a travar devido à falta de outro recurso.

A menos que você execute o Titan com seus 584 TiB de memória (não, como o Linux não pode ser executado como uma instância em um supercomputador), você provavelmente não atingirá esse limite de processo tão cedo. Mesmo assim, o processo médio teria apenas 146 KB de memória, assumindo que não havia memória compartilhada.

Restabelecer Monica - ζ--
fonte
2
+1 para bomba de garfo, mostrou quão perigosos esses métodos recursivos podem ser se usados ​​com casca sem cautela!
aka_learner
9

Existem limites para quase tudo, tanto na vida quanto no Linux. Às vezes, os limites são muito altos e não vale a pena se preocupar, e às vezes são muito baixos, definidos arbitrariamente por um programador preguiçoso ou definidos por limites para o hardware.

Limites arbitrários surgem quando um programador toma uma decisão como o número máximo de caracteres permitido em um campo, como um endereço. É muito mais fácil definir um limite arbitrário do que alocar memória dinamicamente, conforme necessário. Você não deseja alocar toda a memória disponível para um campo de entrada simples, mas também não deseja permitir que a entrada substitua outra memória que possa ser importante. Para arquivos e processos abertos, pode haver um limite arbitrário ou pode ser limitado pela memória disponível. Nesse último caso, coisas ruins começarão a acontecer à medida que você se aproximar do limite, e o sistema pode travar, por isso é bom ter um limite que entra em jogo antes que isso aconteça. Às vezes, os limites arbitrários podem ser determinados na inicialização, dependendo da memória ou do espaço em disco, e geralmente são bastante inteligentes,

Depois, há limites definidos pelo hardware, como o tamanho de um número inteiro ou caractere. Se você possui um sistema de 32 bits, há limites definidos pelo tamanho máximo de um número inteiro (4.294.967.295 se não tiver assinado ou metade desse valor se estiver assinado).

Marty Fried
fonte
1
Limites que parecem arbitrários podem realmente ser baseados em padrões. O padrão internacional limita as linhas de endereço postal a 39 caracteres. Esse limite pode parecer arbitrário. Um limite de 60 caracteres para um endereço provavelmente seria arbitrário. Infelizmente, poucos programadores verificam os padrões; muitos limites (às vezes corretos) são arbitrariamente decididos.
BillThor
Concordo; quando ainda estava trabalhando como programador, passava muito tempo procurando limites estabelecidos, como você disse, ou definidos no sistema operacional como uma macro (como max_path, etc.). Mas devo dizer que os limites arbitrários geralmente são melhores do que nenhum limite, especialmente para comprimentos de campo. :)
Marty Fried
7

Para processos, / proc / sys / kernel / pid_max é o pid máximo permitido, portanto esse é o limite rígido do número de processos que podem ser executados a qualquer instante. No entanto, os limites de memória normalmente entram em jogo bem antes disso.

Para o limite superior de arquivos abertos em toda a máquina, / proc / sys / fs / file-max é o limite máximo; isso é baseado na quantidade de memória na máquina, portanto varia. O kernel define isso para:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

o que resulta em cerca de 100 para cada 1 MB de RAM.

Os limites por processo são diferentes. ulimit irá defini-los.

Colin Ian King
fonte
-5

Temos um limite porque os computadores têm limites, tenho 4 GB de RAM, então não posso rodar 15 jogos agora, posso?

Provavelmente, posso executá-lo com algum atraso, mas não seria humano. É o limite para o seu PC e o Kernal do Linux. Você precisaria de um kernal melhor e muita memória RAM para poder executar qualquer programa lançado em você. .

Como meu laptop quando eu rodava o Windows 7, eu podia jogar o Battlefield, mas era preciso 80% da minha RAM, então, se eu tentasse jogar o "Need For Speed", isso leva 60% do habitual, eu posso abrir os dois, mas todo o meu sistema é abrandou desde que eu estou executando 2 programas pesados, ambos estão lutando pela RAM (Random Access Memory)

Em poucas palavras, um computador normal não pode executar muitos programas ao mesmo tempo Música, Bloco de Notas, Navegador, E-mail, Jogo, você acha que está muito no computador, mas isso é mero. Um jogo como o World of Warcraft ocupa muito mais memória RAM e faz com que seu computador sofra (a menos que você tenha 8 a 16 GB de RAM, como os laptops caros!)

Ubisoft Terzuz
fonte
Obrigado pelas informações sobre processos, como sabemos, haverá alta carga de CPU se muitos processos forem executados simultaneamente, e o tráfego nos núcleos da CPU será muito alto para lidar com isso e com o tempo o sistema entrará em estado travado, sem fornecer nenhuma intervalo de tempo para qualquer um dos processos a serem executados, acho que se não estiver errado. Mas por que também há limite para arquivos abertos no Linux?
aka_learner
Não conheço um limite de arquivos abertos, nunca experimentei isso. Talvez sejam seus computadores limitados em comparação aos meus, não tenho certeza. Eu sempre tenho alguns 10 arquivos abertos. Em seguida, um navegador da Web, o Music Player e o Terminal são abertos.
Ubisoft Terzuz 11/11
Geralmente acontece comigo quando meu banco de dados mysql me fornece o seguinte "120428 20:30:01 [ERRO] / usr / sbin / mysqld: Não é possível abrir o arquivo: './djlabo_open/cart_layout.frm' (errno: 24)" erro em seu log de erros porque o linux não está permitindo que ele abra este arquivo de banco de dados.
aka_learner
Provavelmente é algo diferente do limite do sistema operacional para abrir arquivos.
Nannew 11/11
1
@Terzuz É realmente baseado em se as pessoas consideram as respostas umas das outras factualmente corretas. Muitas pessoas (inclusive eu, infelizmente) sentem que essa resposta pode não estar realmente abordando os limites mencionados na pergunta, mas outros limites.
Reinstate Monica - ζ-- 11/11