리눅스 기반 시스템에서는 다음과 같은 것들이 있습니다. RELIANOID 가전제품의 경우, 각 네트워크 연결, 소켓 또는 열린 파일은 일정량의 전력을 소비합니다. 파일 설명자운영 체제는 리소스 고갈을 방지하기 위해 동시에 열 수 있는 파일 디스크립터 수에 제한을 둡니다.
프로세스가 파일 디스크립터 제한에 도달하면 더 이상 추가 파일이나 소켓을 열 수 없으며 시스템에서 오류가 발생할 수 있습니다.
열려있는 파일이 너무 많습니다
이러한 문제는 시스템 기능에 영향을 미쳐 서비스가 응답하지 않거나 영향을 받는 프로세스 또는 시스템을 다시 시작할 때까지 새 연결을 설정하지 못하게 할 수 있습니다.
이 문서에서는 파일 디스크립터 제한이 어떻게 작동하는지 설명합니다. RELIANOID 시스템과 관리자가 필요에 따라 시스템을 조정하는 방법에 대한 설명입니다.
파일 디스크립터 제한은 어떻게 작동하나요? #
리눅스는 두 가지 주요 유형의 제한을 통해 파일 디스크립터를 관리합니다.
- 시스템 전체 제한
- 프로세스별 제한
안정적인 작동을 위해서는 두 장치 모두 적절하게 구성되어야 합니다.
시스템 전체 파일 디스크립터 제한 #
리눅스 커널은 시스템 전체에 할당할 수 있는 파일 디스크립터 수에 대한 전역 제한을 유지합니다. 이 값은 커널 매개변수에 의해 제어됩니다. fs.file-max
다음 명령어를 사용하여 현재 값을 확인할 수 있습니다.
sysctl fs.file-max
예제 출력 :
fs.file-max = 1000000
이는 시스템이 총 백만 개의 파일 디스크립터를 할당할 수 있음을 의미합니다. 이 한도에 도달하면 기존 파일 핸들이 해제될 때까지 새 파일 핸들을 생성할 수 없습니다.
필요한 경우 관리자는 다음 명령어를 사용하여 일시적으로 값을 높일 수 있습니다.
sysctl -w fs.file-max=2000000
재부팅 후에도 변경 사항이 유지되도록 하려면 다음 매개변수를 추가하세요. /etc/sysctl.conf
예:
fs.file-max = 2000000
다음 명령어를 사용하여 설정을 적용하세요:
sysctl -p
프로세스별 파일 디스크립터 제한 #
시스템 전체 제한 외에도 각 프로세스는 처리할 수 있는 열린 파일 수에 대한 자체 제한을 가지고 있습니다. 이 제한은 다음을 사용하여 제어됩니다. ulimit.
다음 명령어를 통해 현재 한도를 확인할 수 있습니다.
ulimit -n
예제 출력 :
100000
이는 단일 프로세스가 최대 100,000만 개의 파일 디스크립터를 열 수 있음을 나타냅니다.
프로세스가 이 한계에 도달하면 오류가 발생합니다. "열려 있는 파일이 너무 많습니다" 시스템 전체 제한이 여전히 유효한 경우에도 오류가 발생합니다.
파일 디스크립터 제한 RELIANOID #
RELIANOID 서비스는 다음 구성 파일에서 프로세스별 파일 디스크립터 제한을 불러옵니다.
/etc/profile/relianoid.sh
이렇게하면 RELIANOID 구성 요소는 대규모 네트워크 연결을 처리하는 데 필요한 제한 내에서 실행됩니다.
그러나, 동일 시스템에서 실행되는 타사 프로세스는 이러한 제한 사항을 자동으로 상속받지 않을 수 있습니다.따라서 모니터링 에이전트, 외부 도구 또는 사용자 지정 서비스는 파일 디스크립터 제한이 필요한 수준보다 낮을 경우 파일 디스크립터 고갈 오류를 겪을 수 있습니다.
타사 프로세스에 대한 제한 조정 #
타사 애플리케이션에서 더 높은 파일 디스크립터 제한이 필요한 경우 다음 위치에서 구성할 수 있습니다. /etc/security/limits.conf
예 :
* 소프트 노파일 200000 * 하드 노파일 200000
이 설정을 통해 모든 사용자가 열 수 있는 파일 수가 늘어납니다.
또는 특정 사용자에게 제한을 적용할 수도 있습니다.
NCPA 소프트 노파일 200000 NCPA 하드 노파일 200000
변경 사항을 적용한 후에는 해당 서비스 또는 프로세스를 다시 시작하여 업데이트된 제한 사항이 로드되도록 하십시오.
맺음말 #
The "열려 있는 파일이 너무 많습니다" 이 오류는 프로세스가 허용된 최대 파일 디스크립터 수에 도달하여 더 이상 파일이나 네트워크 소켓을 열 수 없을 때 발생합니다. 이 제한을 초과하면 서비스가 새 연결을 수락하지 못하거나 정상적으로 작동하지 못할 수 있습니다.
이러한 상황을 방지하기 위해 관리자는 다음 두 가지 사항을 모두 확인해야 합니다. 시스템 전체 파일 디스크립터 제한 (fs.file-max)와 프로세스당 제한 에 의해 정의 ulimit 올바르게 구성되었습니다.
In RELIANOID 시스템, 서비스 관련 제한 사항은 다음에서 로드됩니다. /etc/profile/relianoid.sh하지만 동일한 어플라이언스에서 실행되는 타사 애플리케이션은 추가 구성이 필요할 수 있습니다. /etc/security/limits.conf 그렇게 하면 적절한 파일 디스크립터 제한을 상속받게 됩니다.
관리자는 적절한 제한을 유지하고 필요에 따라 시스템 구성을 검토함으로써 동시 연결 수가 많은 환경에서 안정적인 운영을 보장하고 서비스 중단을 방지할 수 있습니다.