RHEL5またはその派生物の/etc/sysctl.conf
にfs.file-maxが設定されていない場合、カーネルはどのようにしてデフォルト値を決定しますか?システムRAMの容量に基づいてfs.file-max
値を設定するために使用される式はありますか?同じOSレベルを実行しているが、ハードウェア構成が異なる多数のランダムRHELサーバーを確認しましたが、cat /proc/sys/fs/file-max
はシステムごとに異なる値を示しています。
私自身の質問に答えます。Linux2.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 }