/ proc / sys / fs / file-maxのデフォルト値


9

/ proc / sys / fs / file-maxはオープンファイル記述子の最大数を定義し、実行時または起動時に設定できることを知っています。

ただし、そのデフォルト値は何ですか?私の会社で10台のサーバーをチェックすると、7つの異なる値が得られます。

カーネルのドキュメントでは、値を変更できることについて言及し続けていますが、デフォルト値の計算方法については触れていません。

デフォルト値の決定方法を知っている人はいますか?

回答:


13

file-maxあなたは下に見ていることの限界はproc fsで構造体の一つの値である"./include/linux/fs.h"構造体は次のとおりです。

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

今では、ISを使用し始めます。./fs/file_table.cfiles_stat_struct

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

これで、前のファイルに"./fs/file_table.c"は、本当の仕事をする関数があります

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

で確認できることfiles_initとマクロを見ると、max_tファイルのメモリの10%が8192を超える場合、8192でない限り、その値が使用されます。

files_initは、カーネルの実行が開始されたときに使用されkmem_cache_create、一般的なファイルスラブキャッシュを作成するために呼び出されたときにフラグSLAB_PANICを確認する必要があります。

今、あなたは見る必要があります ./kernel/sysctl.c

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

file-maxはメモリの10%です。システムのメモリサイズが異なる場合、それは正常だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.