파일 디스크립터 수 제한


34

설치하려고 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있습니까?

답변:


39

에 따르면, 커널 문서 , /proc/sys/file-max커널이 질식하기 전에 할당 할 최대 파일 설명자, 총, 글로벌 번호입니다. 이것은 현재 사용자가 아닌 커널 한계입니다. 따라서 유휴 시스템 (단일 사용자 모드, 데몬이 실행되지 않음)에있는 경우 590432 열 수 있습니다 .

문서가 proc/sys/fs/file-max오래 되었습니다. 파일이 오래되었습니다. 이것을 지적 해준 Martin Jambon에게 감사합니다.

소프트 한계와 하드 한계의 차이는 여기 SE에서 대답합니다 . 하드 한계를 초과하지 않으면 일반 사용자로서 소프트 한계를 높이거나 낮출 수 있습니다. 하드 한계를 낮출 수도 있습니다 (그러나 해당 프로세스에 대해 다시 올릴 수는 없습니다). 수퍼 유저는 하드 한계와 소프트 한계를 모두 높이거나 낮출 수 있습니다. 이중 제한 체계는 시스템 정책을 시행하는 데 사용되지만 일반 사용자는 자신에 대한 임시 제한을 설정하고 나중에 변경할 수 있습니다.

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

따라서 특정 경우 ulimit(와 동일 ulimit -Sf) 쉘 및 하위 프로세스가 작성한 파일 크기 에 대한 소프트 제한이 없다고 말합니다 . (아마도 대부분의 경우 좋은 생각입니다)

다른 호출, ulimit -Hn온 보고서 -n제한 (파일 기술자의 최대 수), 하지-f 소프트 제한은 하드 제한보다 높은 것 같다 왜 제한. 입력 ulimit -Hf하면 '무제한'으로 표시됩니다.


14
Linux 4.4.0에서 파일 최대 경로는 /proc/sys/fs/file-max입니다.
Martin Jambon 2016 년

하드 한계 ulimit -Hn 가 시스템의 할당 된 파일 디스크립터 기능에 대한 한계를 목표로합니까?
Webwoman

2
@Webman : 아니오, 그렇지 않습니다. ulimit현재 프로세스 의 한계에만 영향을줍니다 . 현재 프로세스의 한계는 하위 프로세스에도 적용되지만 각 프로세스에는 별도의 수가 있습니다. 예를 들어 ulimit -Hn 10, 한 번에 10 개의 파일 디스크립터 만 열 수 있습니다. 작성하는 각 하위 프로세스에는 최대 10 개의 파일 디스크립터 만있을 수 있습니다. 수퍼 유저 만 한 번 설정된 한도를 늘릴 수 있습니다. 하나를 너무 낮게 설정하면 쉘 프로세스를 종료하고 새로운 프로세스를 시작하는 것이 유일한 옵션 일 수 있습니다.
Alexios

0

"select"시스템 호출은 유닉스에 대한 많은 끔찍한 두뇌 데드 디자인 결정 중 하나입니다.

그것은 20 년 전에 금지되어 왔으며 이제는 문제없이 파일 핸들러를 무제한으로 제한 할 수 있습니다.

커널 구성으로 파일 디스크립터 수를 쉽게 늘릴 수 있지만 ulimit 그러나 "select"시스템 호출을 사용하는 라이브러리가 있으면 프로그램이 불안정 해지고 (메모리 손상) 실패합니다.

Select는 0에서 1023까지의 파일 디스크립터 만 처리 할 수 ​​있으며 더 높은 값을 가진 파일 디스크립터를 공급하면 메모리에 무작위로 찌르고 디스크립터는 디스크립터가 작동하는 것처럼 반복하지 않습니다. 불행히도 많은 라이브러리가 select를 사용합니다.


귀하의 의견은 유용한 경고이지만, 삐걱 거리는 소리를내는 대신 fd_set(3)매뉴얼 페이지를 인용 하고 한계가에서 온 것이 훨씬 더 유용했을 것입니다 FD_SETSIZE. 그리고 가장 좋은 것은 poll(3)답변
Davor Cubranic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.