如果 RHEL 5 或其衍生版本中未设置 fs.file-max /etc/sysctl.conf
,内核如何确定默认值?是否有用于fs.file-max
根据系统 RAM 量设置值的公式?我检查了许多运行相同 OS 级别但具有不同硬件配置的随机 RHEL 服务器,并cat /proc/sys/fs/file-max
在每个系统上显示不同的值。
答案1
我来回答我自己的问题:Linux 2.6 内核将打开文件限制设置为可用内存的 10%。
来源:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/file_table.c
488 void __init files_init(unsigned long mempages)
489 {
490 int n;
491
492 filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
493 SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);
494
495 /*
496 * One file with associated inode and dcache is very roughly 1K.
497 * Per default don't use more than 10% of our memory for files.
498 */
499
500 n = (mempages * (PAGE_SIZE / 1024)) / 10;
501 files_stat.max_files = n;
502 if (files_stat.max_files < NR_FILE)
503 files_stat.max_files = NR_FILE;
504 files_defer_init();
505 lg_lock_init(files_lglock);
506 percpu_counter_init(&nr_files, 0);
507 }