/ proc / sys / fs / file-max의 기본값


9

/ proc / sys / fs / file-max는 열린 파일 디스크립터의 최대 수를 정의하며 런타임 또는 부팅 중에 설정할 수 있음을 알고 있습니다.

그러나 기본값은 무엇입니까? 회사에서 10 대의 서버를 확인하면 7 가지 값이 나옵니다.

커널 문서는 값을 변경할 수 있다고 언급하지만 기본값은 계산되지 않습니다.

누구든지 기본값이 어떻게 결정되는지 알고 있습니까?

답변:


13

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.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,
  },

파일 최대 값은 메모리의 10 %입니다. 시스템의 메모리 크기가 다르면 정상이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.