/ proc / sys / fs / file-max的默认值


9

我知道/ proc / sys / fs / file-max定义了打开文件描述符的最大数量,可以在运行时或引导期间进行设置。

但是:它的默认值是多少?检查我公司的10台服务器会给我7个不同的值,这些值似乎都是随机的。

内核文档只提到了可以更改的值,但是没有更改默认值的计算方式。

谁知道默认值是如何确定的?

Answers:


13

file-max您看到的限制proc fs是struct中struct中"./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 */
};

现在,在./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,
  },

文件最大为内存的10%,如果您的系统具有不同的内存大小,我认为这很正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.