GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo ulimit -n e /proc/sys/fs/file-max differiscono?

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.


Linux
  1. Come ottengo il percorso di un processo in Unix/Linux

  2. In cosa differiscono SO_REUSEADDR e SO_REUSEPORT?

  3. Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

  4. /sys/ documentazione?

  5. Come Linux usa /dev/tty e /dev/tty0

/proc/cpuinfo e /proc/meminfo in Linux

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Come spostare /usr e /var su un'altra partizione o disco

/proc/[pid]/pagemaps e /proc/[pid]/maps | Linux

montare dev, proc, sys in un ambiente chroot?

Come scoprire da quale cartella è in esecuzione un processo?