Valore predefinito di / proc / sys / fs / file-max


9

Sono consapevole che / proc / sys / fs / file-max definisce il numero massimo di descrittori di file aperti e può essere impostato in fase di esecuzione o durante l'avvio.

Tuttavia: qual è il suo valore predefinito? Il controllo di 10 server nella mia azienda mi dà 7 valori diversi, che sembrano tutti casuali.

La documentazione del kernel continua a menzionare che il valore può essere modificato, ma non come viene calcolato il valore predefinito.

Qualcuno di voi sa come viene determinato il valore predefinito?

Risposte:


13

Il file-maxlimite che vedi sotto proc fsè un valore in struct nella "./include/linux/fs.h"struttura è:

/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
  unsigned long nr_files;   /* read only */
  unsigned long nr_free_files;  /* read only */
  unsigned long max_files;    /* tunable THIS IS OUR VALUE */
};

Ora, ./fs/file_table.cle files_stat_structIS iniziano utilizzati:

struct files_stat_struct files_stat = {
  .max_files = NR_FILE /* This constant is 8192 */
};

Ora nel file precedente "./fs/file_table.c"avrà la funzione che renderà il lavoro reale

void __init files_init(unsigned long mempages)
{
  unsigned long n;

  filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
      SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);

  /*
   * One file with associated inode and dcache is very roughly 1K.
   * Per default don't use more than 10% of our memory for files. 
   */

  n = (mempages * (PAGE_SIZE / 1024)) / 10;
  files_stat.max_files = max_t(unsigned long, n, NR_FILE);
  files_defer_init();
  lg_lock_init(files_lglock);
  percpu_counter_init(&nr_files, 0);
}

Da quello che posso vedere nella files_inite guardando la macro max_t, se il 10% della memoria per i file è più di 8192, verranno utilizzati quei valori, a meno che 8192.

files_init viene usato all'avvio del kernel ed è necessario vedere il flag SLAB_PANIC quando kmem_cache_createviene chiamato per creare la cache generale del file slab.

Ora devi guardare ./kernel/sysctl.c

  {
    .procname = "file-max",
    .data   = &files_stat.max_files,
    .maxlen   = sizeof(files_stat.max_files),
    .mode   = 0644,
    .proc_handler = proc_doulongvec_minmax,
  },

Il file-max è il 10% di memoria, se il tuo sistema ha dimensioni di memoria diverse, penso che sia normale.

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.