Linux에서 열린 파일의 최대 수를 구성 할 수있는 크기 (기술적 또는 실용적인)에 제한이 있습니까? 매우 큰 숫자 (예 : 1-100M)로 구성하면 몇 가지 부작용이 있습니까?
임베디드 시스템이 아닌 서버 사용을 생각하고 있습니다. 많은 양의 열린 파일을 사용하는 프로그램은 물론 메모리를 소비하고 느려질 수 있지만 한계가 필요한 것보다 훨씬 크게 구성된 경우 (예 : 구성만으로 소비되는 메모리) 부작용에 관심이 있습니다.
Linux에서 열린 파일의 최대 수를 구성 할 수있는 크기 (기술적 또는 실용적인)에 제한이 있습니까? 매우 큰 숫자 (예 : 1-100M)로 구성하면 몇 가지 부작용이 있습니까?
임베디드 시스템이 아닌 서버 사용을 생각하고 있습니다. 많은 양의 열린 파일을 사용하는 프로그램은 물론 메모리를 소비하고 느려질 수 있지만 한계가 필요한 것보다 훨씬 크게 구성된 경우 (예 : 구성만으로 소비되는 메모리) 부작용에 관심이 있습니다.
답변:
제한의 주된 이유는 과도한 메모리 소비를 피하는 것입니다 (각 열린 파일 설명자는 커널 메모리를 사용합니다). 또한 파일 디스크립터가 누출되고 시스템 리소스를 소비하는 버그가있는 응용 프로그램을 보호합니다.
그러나 10 년 전의 시스템과 비교했을 때 RAM 현대 시스템이 얼마나 많은지를 감안할 때 오늘날 기본값은 상당히 낮습니다.
2011 년 Linux에서 파일 디스크립터의 기본 하드 한계 는 1024에서 4096 으로 증가했습니다 .
일부 소프트웨어 (예 : MongoDB)는 기본 제한보다 더 많은 파일 설명자를 사용합니다. MongoDB 직원 은이 제한을 64,000으로 올리는 것이 좋습니다 . rlimit_nofile
특정 응용 프로그램에 300,000을 사용했습니다 .
소프트 한계를 기본값 (1024)으로 유지하는 한 하드 한계를 늘리는 것이 안전합니다. setrlimit()
한계를 소프트 한계 이상으로 높이려면 프로그램을 호출해야하며 여전히 하드 한계에 의해 제한됩니다.
관련 질문도 참조하십시오.
기술적으로 부호없는 long (C Lang)의 최대 값, 즉 4,294,967,295로 제한됩니다.
참조 : 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 */
};
조용히 늦었지만 다른 사람이이 질문에 대한 답을 얻는 데 도움이됩니다. 리눅스에서 열린 파일 수에 대한 실제 제한은 프로세스가 열 수있는 최대 파일 설명자 수를 사용하여 계산할 수도 있습니다.
시스템에서 시스템으로 한계가 변경되는 것을 보았습니다. 로부터 getlimit의 man 페이지 당신은 볼 수 있습니다 RLIMIT_NOFILE-1
내부적으로 지정을 제한합니다.
RLIMIT_NOFILE 값을 확인하려면 아래 명령문을 사용하여 튜플을 얻을 수 있습니다
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
튜플은 결과를 (Soflimit, hardlimit)로 반환합니다. 여러 시스템에서 실행하면 결과는 다음과 같습니다.
(1024, 1048576) # on UBUNTU linux
(65536, 65536) # on amazon linux
(1024, 9223372036854775807) # on macos
참고 : 9223372036854775807이 숫자는 단순히 무한대를 의미합니다. 이 작업을 수행하기 전에 항상 다른 자원 제한에 도달합니다. 시스템의 하드 리미트를 원래 수준 이상으로 수정 한 경우 커널 매개 변수를 수정해야합니다.