Linux-Kernel

/proc/sys/fs/file-max 的預設值

  • August 25, 2015

我知道 /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.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,
 },

file-max 是記憶體的 10%,如果你的系統有不同的記憶體大小,我認為這是正常的。

引用自:https://serverfault.com/questions/716578