web-dev-qa-db-ja.com

RHEL 5(Linuxカーネル2.6.18)はデフォルトのfs.file-max設定をどのように決定しますか?

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

4
aaltonen

私自身の質問に答えます。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 } 
3
aaltonen