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

14

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

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

    
por aka_learner 11.11.2012 / 18:33

4 respostas

16

Isto é principalmente por razões históricas. Em mainframes Linux mais antigos, muitos usuários se conectam e usam os recursos do mainframe. Naturalmente, era necessário limitar e, como operações como manipulações de arquivos e processos foram construídas no kernel, elas eram limitadas ali. Também ajuda a limitar ataques como o fork fork . Uma defesa contra a bomba de formulário usando limites de processo é mostrada aqui .

Ele também ajuda a manter os daemons e serviços complexos sob controle, não permitindo a abertura de arquivos e bifurcações, semelhante ao que a fork fork tenta fazer.

Também devem ser observadas coisas como a quantidade de RAM e CPU disponíveis, e o fato de que um contador de 32 bits pode referenciar muito (apenas 4294967296 entradas que podem ser contadas por um contador de 32 bits), mas Os limites são muito superiores aos normalmente definidos pelos programadores e administradores de sistema. De qualquer forma, muito antes de você ter 4294967296 processos, sua máquina provavelmente teria sido reinicializada, exatamente como 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 (você não vai, já que o Linux não pode ser executado como uma instância em um supercomputador), você provavelmente não atingirá este limite de processo tão cedo. Mesmo assim, o processo médio teria apenas aproximadamente 146 KB de memória, assumindo que não há memória compartilhada.

    
por hexafraction 11.11.2012 / 19:43
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 eles são muito baixos, definidos arbitrariamente por um programador preguiçoso ou definidos pelos limites do hardware.

Limites arbitrários ocorrem 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 quer permitir que a entrada sobrescreva 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. Se o último, então coisas ruins começarão a acontecer quando você se aproximar do limite, e o sistema pode travar, então é sempre 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, mas ainda arbitrários - alguém decidiu onde o desempenho se tornaria intolerável ou perigoso e estabelecia limites para evitar essa situação.

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

    
por Marty Fried 11.11.2012 / 19:56
7

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

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

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

que funciona como cerca de 100 para cada 1 MB de RAM.

Por limite de processo são diferentes. ulimit irá definir estes.

    
por Colin Ian King 12.11.2012 / 13:19
-5

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

Eu provavelmente posso executá-lo com algum atraso, mas não seria humano. É o limite do seu PC e do Kernal do Linux. Você precisaria de um kernal melhor e de muita memória RAM para poder manter qualquer programa que fosse jogado em você.

Tal como o meu portátil quando corri o Windows 7, consegui Jogar Battlefield, mas demorei 80% da minha RAM, por isso, se tentasse jogar "Need For Speed", 60% usualmente, posso abrir ambos, mas depois o meu todo o sistema é retardado desde que eu estou executando 2 programas pesados, ambos estão lutando por RAM (Random Access Memory)

Em poucas palavras, um computador normal não pode executar muitos programas de uma só vez Música, bloco de notas, navegador, e-mail, jogo, você acha que é um monte em um computador, mas isso é mero, um jogo como World of Warcraft tem muito mais RAM e faz seu computador lutar (a menos que você tenha 8-16 GB de RAM como caro laptops fazem!)

    
por Ubisoft Terzuz 11.11.2012 / 18:38