Linux-Kernel
/proc/sys/fs/file-max 的預設值
我知道 /proc/sys/fs/file-max 定義了打開文件描述符的最大數量,可以在執行時或啟動期間設置。
然而:它的預設值是多少?檢查我公司的 10 台伺服器給了我 7 個不同的值,這些值似乎都是隨機的。
核心文件只是一直提到可以更改該值 - 但不是如何計算預設值。
你們中有人知道預設值是如何確定的嗎?
file-max
您在 struct 中看到的限制proc fs
是 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.c
:files_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%,如果你的系統有不同的記憶體大小,我認為這是正常的。