Perché limitare il numero di file aperti e processi in esecuzione in Linux?


14

Non ho molte conoscenze sul funzionamento interno del sistema operativo, quindi perché abbiamo limiti per il numero massimo di file aperti e processi in esecuzione in Linux?

Gradirei se qualcuno potesse aiutarmi a capire.

Risposte:


16

Ciò è principalmente per motivi storici. Sui mainframe Linux meno recenti, molti utenti si connettono e utilizzano le risorse del mainframe. Certo, era necessario limitare, e poiché tali operazioni come handle di file e processi erano integrati nel kernel, lì era limitato. Aiuta anche a limitare gli attacchi come la bomba a forcella . Una difesa contro i limiti del processo forma bomba utilizzando è mostrato qui .

Aiuta anche a tenere sotto controllo servizi e demoni complessi, impedendo il bombardamento in fuga e l'apertura dei file, in modo simile a quello che la bomba a forchetta tenta di fare.

Va anche notato cose come la quantità di RAM e CPU disponibili e il fatto che un contatore a 32 bit può fare solo riferimento così tanto (solo 4294967296 voci che possono essere contate da un contatore a 32 bit), ma tali limiti sono lontani sopra quelli normalmente impostati da programmatori e amministratori di sistema. Ad ogni modo, molto prima che avessi 4294967296 processi, la tua macchina sarebbe stata probabilmente riavviata, o esattamente come previsto, o quando ha iniziato a bloccarsi a causa della fame di un'altra risorsa.

A meno che non eseguiate Titan con i suoi 584 TiB di memoria (non lo farete, poiché Linux non può essere eseguito come un'istanza su un supercomputer), probabilmente non raggiungerete questo limite di processo in qualunque momento presto. Anche in questo caso, il processo medio avrebbe solo circa 146 KB di memoria, supponendo che non vi fosse memoria condivisa.


2
+1 per la bomba a forcella, ha mostrato quanto possano essere pericolosi questi metodi ricorsivi se usati nella shell senza cautela!
aka_learner,

9

Ci sono limiti a quasi tutto, sia nella vita che in Linux. A volte i limiti sono molto alti e non vale la pena preoccuparsi, e talvolta sono troppo bassi, impostati arbitrariamente da un programmatore pigro o impostati da limiti all'hardware.

Limiti arbitrari si verificano quando un programmatore prende una decisione come il numero massimo di caratteri consentiti in un campo, come un indirizzo. È molto più semplice impostare un limite arbitrario che allocare dinamicamente la memoria secondo necessità. Non si desidera allocare tutta la memoria disponibile in un semplice campo di input, ma non si desidera consentire all'input di sovrascrivere altra memoria che potrebbe essere importante. Per file e processi aperti, potrebbe esserci un limite arbitrario oppure potrebbe essere limitato dalla memoria disponibile. In quest'ultimo caso, cominceranno ad accadere cose brutte man mano che ti avvicini al limite e il sistema potrebbe bloccarsi, quindi spesso è bene avere un limite che entra in gioco prima che ciò accada. A volte, i limiti arbitrari possono essere determinati all'avvio a seconda della memoria o dello spazio su disco e di solito sono abbastanza intelligenti,

Quindi ci sono limiti impostati dall'hardware, come la dimensione di un numero intero o di un carattere. Se hai un sistema a 32 bit, allora ci sono limiti impostati dalla dimensione massima di un numero intero (4.294.967.295 se non firmato, o metà che se firmato).


1
I limiti che appaiono arbitrari possono in realtà essere basati su standard. Lo standard internazionale limita le righe dell'indirizzo postale a 39 caratteri. Tale limite può apparire arbitrario. Un limite di 60 caratteri per un indirizzo sarebbe probabilmente arbitrario. Sfortunatamente, troppo pochi programmatori controllano gli standard, così tanti limiti (a volte corretti) vengono decisi arbitrariamente.
BillThor,

Sono d'accordo; quando lavoravo ancora come programmatore, passavo molto tempo a cercare i limiti dichiarati, come hai detto, o definito nel sistema operativo come una macro (come max_path, ecc.). Ma dovrò dire che i limiti arbitrari sono generalmente migliori dei limiti, soprattutto per le lunghezze di campo. :)
Marty Fried,

7

Per i processi, / proc / sys / kernel / pid_max è il pid massimo consentito, quindi questo è il limite massimo del numero di processi che possono essere eseguiti in qualsiasi momento. Tuttavia, i limiti di memoria normalmente entrano in gioco molto prima.

Per il limite superiore di file aperti sull'intera macchina, / proc / sys / fs / file-max è il limite massimo; questo si basa sulla quantità di memoria nella macchina, quindi varierà. Il kernel lo imposta come:

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

che risulta essere di circa 100 per ogni 1 MB di RAM.

I limiti per processo sono diversi. ulimit li definirà.


-5

Abbiamo un limite perché i computer hanno limiti, ho 4 GB di RAM, quindi non posso eseguire 15 giochi ora posso?

Molto probabilmente posso eseguirlo con un certo ritardo ma non sarebbe umano, è il limite sul tuo PC e Kernal di Linux, Avresti bisogno di un kernal migliore e un sacco di RAM per essere in grado di contenere qualsiasi programma che ti viene lanciato .

Come il mio laptop quando eseguivo Windows 7, potevo giocare a Battlefield, ma ci voleva l'80% della mia RAM, quindi se provassi a giocare a "Need For Speed", che richiede normalmente il 60%, posso aprire entrambi ma poi tutto il mio sistema è rallentato da quando sto eseguendo 2 programmi pesanti, entrambi combattono per la RAM (Random Access Memory)

In parole povere, un normale computer non può eseguire molti programmi contemporaneamente Musica, Blocco note, Browser, E-mail, Gioco, pensi che sia molto su un computer ma è semplice, Un gioco come World of Warcraft richiede molta più RAM e rende difficile il tuo computer (a meno che tu non abbia 8-16 GB di RAM come fanno i costosi laptop!)


Grazie per le informazioni sui processi poiché sappiamo che ci sarà un elevato carico della CPU se molti processi verranno eseguiti contemporaneamente e il traffico sui core della CPU sarà così elevato da gestirlo e con il tempo il sistema andrà in stato di blocco, senza fornire alcun intervallo di tempo per qualsiasi processo da eseguire immagino se non sbaglio. Ma perché esiste anche un limite per i file aperti in Linux?
aka_learner,

Non conosco un limite di file aperti, non l'ho mai provato, forse i tuoi computer sono limitati rispetto ai miei, non sono sicuro. Ho sempre alcuni 10 file aperti, quindi un browser Web, Music Player e il Terminale aperti.
Ubisoft Terzuz,

In genere succede con me quando il mio database mysql mi dà "120428 20:30:01 [ERRORE] / usr / sbin / mysqld: Impossibile aprire il file: './djlabo_open/cart_layout.frm' (errno: 24)" errore nel suo registro degli errori perché Linux non gli consente di aprire questo file di database.
aka_learner,

Questo è probabilmente qualcosa di diverso rispetto a un limite del sistema operativo per aprire i file.
Nanne,

1
@Terzuz Si basa davvero sul fatto che le persone considerino le risposte reciproche effettivamente corrette. Molte persone (incluso me, sfortunatamente) hanno la sensazione che questa risposta non stia davvero affrontando i limiti menzionati nella domanda, ma altri limiti.
Ripristina Monica - ζ--
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.