파일 설명자 제한

파일 설명자 제한

설치하려고 하는데 389-ds다음 경고가 표시됩니다.

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

파일 설명자를 이해하지만 소프트 및 하드 제한은 이해하지 못합니다.

달리면 cat /proc/sys/fs/file-max다시 돌아온다 590432. 이는 최대 590432개의 파일을 열 수 있음을 의미합니다(예: 최대 590432개의 파일 설명자가 있음).

하지만 실행하면 ulimit다른 결과가 나타납니다.

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

그러나 하드/소프트 제한은 어디에서 왔으며 ulimit저장된 숫자와 어떤 관련이 있습니까 /proc/sys/fs/file-max?

답변1

~에 따르면커널 문서, /proc/sys/fs/file-max는 최대 총 파일 수, 전역 수핸들커널은 차단하기 전에 할당합니다. 이는 현재 사용자의 제한 사항이 아닌 커널의 제한 사항입니다. 그래서 당신은할 수 있는유휴 시스템(단일 사용자 모드, 실행 중인 데몬 없음)에 혼자 있는 경우 590432를 엽니다. struct file커널의 파일 핸들은 파일 설명자와 다릅니다. 여러 파일 설명자가 동일한 파일 핸들을 가리킬 수 있으며 파일 핸들도 존재할 수 있습니다.아니요내부적으로 연결된 설명자입니다. 시스템 전체에 대한 파일 설명자 제한은 없습니다. 이는 프로세스별로만 적용할 수 있습니다.

이 문서는 오래된 것이므로 /proc/sys/fs/file-max오랫동안 사용되었습니다. 이 점을 지적한 Martin Jambon에게 감사드립니다.

SE에서 응답되는 소프트 제한과 하드 제한의 차이점. 하드 제한을 초과하지 않는 한 일반 사용자로서 소프트 제한을 늘리거나 줄일 수 있습니다. 하드 한도를 낮출 수도 있습니다(그러나 프로세스 중에 다시 높일 수는 없습니다). 수퍼유저로서 하드 및 소프트 제한을 높이거나 낮출 수 있습니다. 이중 제한 체계는 시스템 정책을 시행하는 데 사용되지만 일반 사용자가 스스로 임시 제한을 설정하고 나중에 변경할 수도 있습니다.

하드 제한을 소프트 제한 아래로 낮추려고 하면(수퍼유저가 아닌 경우) EINVAL(잘못된 인수)가 반환됩니다.

따라서 귀하의 특정 경우에 ulimit(와 동일 ulimit -Sf)은 귀하가 다음에 관심이 있음을 의미합니다.셸 및 해당 하위 프로세스에서 작성된 파일 크기. (대부분의 경우 이는 좋은 생각일 것입니다)

다른 통화 ulimit -Hn보고서 제한 -n(열린 파일 설명자의 최대 수),아니요제한이 있기 -f때문에 소프트 제한이 하드 제한보다 높은 것 같습니다. 입력하시면 ulimit -Hf도 받으실 수 있습니다 unlimited.

답변2

"select" 시스템 호출은 Windows 95를 비교했을 때 여전히 훌륭해 보이는 Unix의 수많은 끔찍한 설계 결정 중 하나입니다.

20년 전에 금지되었어야 했습니다. 그렇다면 지금은 파일 처리기를 제한하는 데 아무런 문제가 없을 것입니다.

커널 구성 및 ulimit를 사용하여 파일 설명자 수를 쉽게 늘릴 수 있지만, 라이브러리가 "select" 시스템 호출을 사용하는 경우 프로그램이 불안정해지고 실패하게 된다는 점을 명심하십시오(저작자가 전달된 파일 설명자를 알고 테스트하지 않는 한). 문자 수가 FD_SET_MAX보다 큰 경우)이 경우 poll 또는 epoll을 사용하도록 전환됩니다(이 경우 처음부터 이를 고려하지 않은 이유는 확실하지 않습니다).

select는 0에서 1023까지(또는 FD_SET 하드코딩된 상수에 설정된 모든 것)의 파일 설명자만 처리할 수 있습니다. 파일 설명자에 더 높은 값을 지정하면 메모리에 무작위로 삽입되며 선택은 이 설명자 작업을 절대 복제하지 않습니다. 불행하게도 많은 라이브러리에서는 여전히 select를 사용하고 있으며 모든 샘플 코드와 튜토리얼에서 이 선택이 사용되는 것을 볼 수 있습니다.

끔찍하기 때문에 이 댓글은 폭언이자 답변입니다. 화를 내지 않고는 대답할 수 없었다.

관련 정보