Oggi il mio server si è bloccato con Too many open files in system: ma io hanno già valori alti, qual è un valore massimo per questo?

Mi sembra che non ci siano buoni risultati su Google per questo, spiegando cosa è necessario prendere in considerazione per impostare questi valori, dicono semplicemente di impostarlo come 100k.

Ho un server RAM da 32 GB che utilizza solo 10 GB in questo momento, presumo che aumentare i limiti dei file a valori molto alti aumenterà lutilizzo della RAM, esiste un qualche tipo di formula che puoi usare per calcolarlo? Come per 8 GB di ram tu può avere un numero X di file aperti?

Impostazioni correnti:

cat /proc/sys/fs/file-max 100000 ulimit -Hn 1048576 ulimit -Sn 1024 

Commenti

  • Non è una risposta, ma mi colpisce che limitare il numero massimo di file aperti non è un modo per risparmiare RAM ma le prestazioni di I / O del disco. Consentire un numero elevato di file aperti implica consentire un numero (potenzialmente) elevato di accessi al disco. Inoltre, è probabile che tu abbia un limite generale a livello di sistema e un limite per processo su questo. Non essendo un utente Linux, non posso ' dire molto di più su quello, oltre a quello ulimit mostrerà / imposterà un limite di risorse per processo.
  • Questo è comunque un problema anche per i dischi SSD? ' è un server e non mi interessa ' se muore, la società di hosting lo sostituirà e io ho i backup. Inoltre ho letto che anche i socket di rete possono causare questo problema, mi preoccupo principalmente delle prestazioni. ' pago per lhardware se utilizzo il 100% o il 5%, purché ' migliori le prestazioni, perché preoccuparsi? Per un server cloud potrei vedere questo un problema, ma per lhardware dedicato non proprio
  • Sì, anche il numero di socket aperti conterà per questo limite (descrittori di file aperti in generale). Me ne sono dimenticato. Quindi, se la RAM è la tua unica preoccupazione, non ' penso che mi preoccuperei di aumentare il limite, a meno che ciò non significhi che qualunque servizio fornisci inizi ad allocare memoria extra relativa a ciascun socket aperto. Questo sarebbe qualcosa che solo tu potresti indagare.

Rispondi

Come dice Kusalananda, aumentando file-max non avrà un impatto diretto sulluso della memoria, ma consentirà ai processi di aprire più descrittori di file che avranno un effetto a catena (sia dal tracciamento delle descrizioni dei file nel kernel, sia dallaumento della memoria utilizzo nei processi che utilizzano tali descrizioni e descrittori) – i commenti del kernel suggeriscono circa un kilobyte per file per i dati del kernel e ridurranno il valore predefinito di file-max (8192) se ciò finisce rappresenta più del 10% della memoria allavvio del sistema ( cioè ci sono solo 80 MiB di RAM). Il valore massimo imposto dal kernel è il valore massimo che può essere memorizzato in una variabile di tipo long in C sulla tua architettura.

Se aumenti file-max, dovresti anche aumentare inode-max; la documentazione del kernel dice che dovrebbe essere “3-4 volte più grande del valore in file-max, poiché anche stdin, stdout e socket di rete necessitano di una struttura inode per gestirli. “

Nota che premendo file-max verrà visualizzato un messaggio di registro del kernel che dice” VFS: limite massimo file n raggiunto “, Con il valore appropriato per n . Se non ce lhai nei tuoi log, o non stai premendo file-max o stai filtrando troppo i tuoi log (è un messaggio di log a livello di informazioni).

(file-max non limita i processi con CAP_SYS_ADMIN, quindi premerlo non fermerà tutto.)

Commenti

  • Quindi non cè svantaggio nellavere numeri arbitrariamente alti? Non ' non vedo inode-max nel mio sistema, dovunque? Ubuntu 16.04 qui. Voglio solo evitare che il mio server si blocchi di nuovo, eseguo più servizi web su questo server e non ' mi interessa lutilizzo delle risorse
  • Lo svantaggio è che i processi runaway non verranno catturati dal limite generale sulle descrizioni dei file, quindi potrebbero causare la fame di risorse in altri modi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *