Soluzione 1:
file-max
è il numero massimo di descrittori di file (FD) applicati a livello di kernel, che non può essere superato da tutti i processi senza aumentare. Il ulimit
viene applicato a livello di processo, che può essere inferiore a file-max
.
Non vi è alcun rischio di impatto sulle prestazioni aumentando file-max
. Le distribuzioni moderne hanno l'FD massimo impostato piuttosto alto, mentre in passato richiedeva la ricompilazione e la modifica del kernel per aumentare oltre 1024. Non aumenterei l'intero sistema a meno che tu non abbia un'esigenza tecnica.
La configurazione per processo spesso deve essere messa a punto per servire un particolare demone, sia esso un database o un server Web. Se rimuovi completamente il limite, quel demone potrebbe potenzialmente esaurire tutte le risorse di sistema disponibili; il che significa che non sarai in grado di risolvere il problema se non premendo il pulsante di ripristino o spegnendo e riaccendendo. Naturalmente, è probabile che uno di questi provochi il danneggiamento di qualsiasi file aperto.
Soluzione 2:
La limitazione di ulimit è per utente unico. Quindi l'utente1, indipendentemente dal numero di accessi o dai processi in esecuzione, sarebbe limitato a 1024. È combinato.
Non sono sicuro di aver compreso completamente il significato di quella frase (l'inglese non è la mia lingua madre) Se quella frase significa che la configurazione ulimit per i descrittori di file non è una limitazione per processo, la risposta accettata (AFAIK) è sbagliata.
Quello che voglio dire è che se un utente ha avviato 4 processi e la configurazione ulimit per FD è 1024, ogni processo può aprire 1024 FD. L'utente non sarà limitato a 1024 FD ma ai processi avviati da quell'utente.
Ad esempio:
[email protected]:~$ ulimit -n
1024
[email protected]:~$ lsof | grep $USER | wc -l
8145
Ecco un esempio in Perl in cui raggiungiamo il limite (è un limite per processo):
#!/usr/bin/perl
$count = 0;
@filedescriptors;
while ($count <= 1024) {
$FILE = ${count};
open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
push(@filedescriptors, $FILE);
$count ++;
}
Risultato:
FDs: 1021 Too many open files at ./test.pl line 8.
1021 perché c'erano 3 descrittori di file aperti prima di raggiungere il ciclo while (stdout, stdin e stderr)
Scusa se mi sbaglio completamente o se ho frainteso la risposta.