capire i file descrittori max per linux e nginx e il valore migliore per worker_rlimit_nofile

Ho avuto l'errore apparentemente comune di "troppo descritti file" su nginx. Dopo molto ricerca, la soluzione è chiaramente aumentare il numero di descrittori di file disponibili per nginx. Ma non c'è abbastanza informazioni là fuori per me per sentirmi a proprio agio fare questo in modo significativo e sicuro. Ecco i punti principali che la maggior parte dei thread di forum / e-mail coprono:

  • il sistema operativo dispone di un limite di descrittore totale di file (sul mio sistema, output cat /proc/sys/fs/file-max "100678")
  • each utente può avere anche il proprio limite (ma sul mio sistema, esegue ulimit come qualsiasi output utente "illimitato" vedi aggiornamento in fondo con più dettaglio )
  • poche persone hanno detto qualcosa in linea con quanto ha detto questa persona : "Direttiva worker_rlimit_nofile non specifica" quanti ", è il limite del sistema operativo che lo fa. Direttiva worker_rlimit_nofile consente solo un modo rapido e sporco di ingrandire questo limite se non è sufficiente ". Quindi immagino che l'implicazione è che è "meglio" impostare il limite per l'utente OS nginx invece che nella configuration?

Posso solo gettare un valore worker_rlimit_nofile maggiore del numero di connessioni per lavoratore e chiamarlo un giorno, ma mi sento di non sapere davvero cosa sta succedendo.

  • perché il limite per lavoratore sarebbe inferiore al limite OS?
  • Come faccio a scoprire che cosa è il mio limite?

aggiornamento : sia per root sia per un utente normale, le uscite ulimit "illimitate", MA ulimit -Hn e ulimit -Sn entrambe le uscite 1024

2 Solutions collect form web for “capire i file descrittori max per linux e nginx e il valore migliore per worker_rlimit_nofile”

worker_rlimit_nofile imposta il limite per i descrittori di file per i processi del lavoratore in contrasto con l'utente che esegue nginx. Se altri programmi in esecuzione sotto questo utente non saranno in grado di gestire in modo grazioso l'esecuzione di descrizioni di file, è necessario impostare questo limite leggermente inferiore a quello che è per l'utente.

In primo luogo, cosa utilizza i descrittori di file?

  1. Ogni connessione triggers con un client
  2. Utilizzo di proxy_pass? Che aprirà un socket all'host: la port che gestisce queste richieste
  3. Utilizzo di proxy_pass a una port locale? È un'altra presa aperta. (Per il proprietario di quel process)
  4. file statici serviti da nginx

Perché il limite per lavoratore sarebbe inferiore al limite OS?

Questo è controllato dal sistema operativo perché il lavoratore non è l'unico process in esecuzione sulla macchina. Per cambiarlo per l'utente che esegue nginx, vedi sotto. Sarebbe molto male se i tuoi lavoratori hanno utilizzato tutti i descrittori di file disponibili a tutti i processi, non impostare i limiti in modo che sia ansible.

 #/etc/sysctl.conf #This sets the value you see when running cat /proc/sys/fs/file-max fs.file-max = 65536" #/etc/security/limits.conf #this sets the defaults for all users * soft nofile 4096 * hard nofile 4096 #This overrides the default for user `usernamehere` usernamehere soft nofile 10240 usernamehere hard nofile 10240 

Dopo queste modifiche di limite di sicurezza ritengo che wherevo ancora aumentare il softlimit per l'utente usando ulimit .

Come faccio a scoprire che cosa è il mio limite?

ulimit -a tutti i limiti associati all'utente che lo fai come.

Devo controllare la fonte per essere onesta, ma è abbastanza bassa.

Ho usato worker_rlimit_nofile 15000; e non ha avuto problemi, è ansible aumentarlo in modo sicuro, però, la possibilità di esaurire i descrittori di file è minuscola.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.