Standardwert von / proc / sys / fs / file-max

9

Mir ist bekannt, dass / proc / sys / fs / file-max die maximale Anzahl offener Dateideskriptoren definiert und zur Laufzeit oder während des Startvorgangs festgelegt werden kann.

Allerdings: Was ist der Standardwert? Wenn ich 10 Server in meinem Unternehmen überprüfe, erhalte ich 7 verschiedene Werte, die alle zufällig erscheinen.

In der Kerneldokumentation wird immer wieder erwähnt, dass der Wert geändert werden kann - nicht jedoch, wie der Standardwert berechnet wird.

Weiß jemand von euch, wie der Standardwert bestimmt wird?

Taranion
quelle

Antworten:

13

Die file-maxGrenze, die Sie unter sehen, proc fsist ein Wert in struct in "./include/linux/fs.h"der struct:

/* 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 */
};

Jetzt in ./fs/file_table.cder files_stat_structBEGIN verwendet:

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

Jetzt in der vorherigen Datei "./fs/file_table.c"wird die Funktion haben, die den eigentlichen Job macht

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);
}

Nach files_initdem max_t, was ich im und im Makro sehen kann: Wenn 10% des Arbeitsspeichers für Dateien mehr als 8192 sind, werden diese Werte verwendet, es sei denn, 8192.

files_init wird verwendet, wenn der Kernel ausgeführt wird und Sie das Flag SLAB_PANIC sehen müssen, wenn Sie kmem_cache_createzum Erstellen des allgemeinen Datei-Slab-Cache aufgerufen werden.

Jetzt musst du schauen ./kernel/sysctl.c

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

Das Dateimaximum beträgt 10% des Speichers. Wenn Ihr System eine andere Speichergröße hat, halte ich das für normal.

c4f4t0r
quelle