ulimit -n과 / proc / sys / fs / file-max는 어떻게 다릅니 까?


32

EC2에서 방금 부팅 한 새로운 CentOS 이미지에서 ulimit 기본값은 1024 개의 열린 파일이지만 / proc / sys / fs / file-max는 761,408로 설정되어 있으며이 두 제한이 어떻게 작동하는지 궁금합니다. 함께. / proc / sys / fs / file-max가 시스템 전체에있는 동안 ulimit -n이 파일 설명자 수에 대한 사용자 당 제한이라고 생각합니다. 이 경우 동일한 사용자로 두 번 로그인했다고 가정합니다. 로그인 한 각 사용자는 열린 파일 수에 대해 1024 개의 제한이 있습니까? 사용자들에게?

시스템에서 파일을 너무 많이 열지 않는 경우 최대 파일 설명자를 매우 높은 수로 설정하면 성능에 많은 영향을 미칩니 까?


태그 추가 : bash linux kernel system-resources
Warner

답변:


28

file-max커널 수준에서 시행되는 최대 파일 디스크립터 (FD)는 증가하지 않고 모든 프로세스가이를 능가 할 수는 없습니다. 은 ulimit댄 적은 될 수있는 프로세스 레벨에 적용됩니다 file-max.

증가해도 성능에 영향을 줄 위험은 없습니다 file-max. 현대 배포판의 최대 FD는 꽤 높지만 과거에는 커널 재 컴파일 및 수정을 통해 1024 이상으로 증가해야했습니다. 기술적 인 요구가 없다면 시스템 전체는 늘리지 않을 것입니다.

프로세스 별 구성은 종종 데이터베이스 또는 웹 서버 인 특정 데몬을 제공하도록 조정해야합니다. 제한을 완전히 제거하면 해당 데몬이 사용 가능한 모든 시스템 리소스를 완전히 소모 할 수 있습니다. 다시 설정 버튼을 누르거나 전원을 껐다 켜는 것 외에는 문제를 해결할 수 없습니다. 물론 둘 중 하나가 열려있는 파일을 손상시킬 수 있습니다.


ulimit를 사용하여 설정된 사용자 별 제한이 모든 사용자에 대해 동일하다는 것을 이해하고 있습니까? 사용자마다 다른 값을 사용하는 방법이 있습니까?
Oliver

예, 설정은 전체적으로 또는 사용자별로 설정할 수 있습니다.
워너

귀하의 게시물을 올바르게 받으면 사실이 아닙니다. 사용자 xy에 의해 생성 된 프로세스 당이며, 이것은 /etc/sysctl.conf에 정의 된 파일 시스템 최대 값에 의해 제한됩니다.
Jeredepp

3
ulimit한계는 있지만, 프로세스 당, 사용자 당 아닙니다! unix.stackexchange.com/questions/55319/…
Tonin

@ Tonin-예,이 답변은 잘못되었습니다.
Nemo

11

ulimit의 제한은 고유 한 사용자 당입니다. 따라서 user1은 로그인 횟수 나 실행중인 프로세스 수에 관계없이 1024로 제한됩니다.

해당 문장의 의미를 완전히 이해했는지 잘 모르겠습니다 (영어는 모국어가 아닙니다).이 문장이 파일 디스크립터에 대한 ulimit 구성이 프로세스 별 제한 사항이 아니라는 것을 의미하는 경우 허용되는 답변 (AFAIK)이 잘못되었습니다.

내 말은, 일부 사용자가 4 개의 프로세스를 시작했고 FD의 ulimit 구성이 1024 인 경우 각 프로세스는 1024 개의 FD를 열 수 있습니다. 사용자는 1024 FD로 제한되지 않지만 해당 사용자가 시작한 프로세스입니다.

예를 들면 다음과 같습니다.

me@superme:~$ ulimit -n
1024
me@superme:~$ lsof | grep $USER | wc -l
8145

다음은 한계에 도달하는 펄 예제입니다 (프로세스 당 한계입니다).

#!/usr/bin/perl

$count = 0;
@filedescriptors;

while ($count <= 1024) {
    $FILE = ${count};
    open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
    push(@filedescriptors, $FILE);
    $count ++;
}

결과:

FDs: 1021 Too many open files at ./test.pl line 8.

while 루프 (stdout, stdin 및 stderr)에 도달하기 전에 3 개의 열린 파일 디스크립터가 있었기 때문에 1021

내가 완전히 틀렸거나 답을 잘못 이해하면 죄송합니다.


네 말이 맞아 워너의 응답이 의미에서 잘못 @ 제한은 프로세스 당 기본에 아니라 사용자 당 때문에
filipenf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.