답변:
file-max
아래 proc fs
에 표시 되는 한계 는 구조체의 구조체에서 하나의 값 "./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 */
};
지금에 IS 사용을 시작하기 :./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,
},
파일 최대 값은 메모리의 10 %입니다. 시스템의 메모리 크기가 다르면 정상이라고 생각합니다.