ulimit 수정: 열린 파일: 수정할 수 없음 제한: 작업이 허용되지 않음

ulimit 수정: 열린 파일: 수정할 수 없음 제한: 작업이 허용되지 않음

저는 이것을 다양한 GNU/Linux 설치에서 테스트했습니다:

perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'

시스템 A와 D

내가 도달한 첫 번째 제한은 1024입니다. 이를 /etc/security/limits.conf에 넣으면 쉽게 늘릴 수 있습니다.

*                hard    nofile          1048576

그런 다음 다음을 실행하십시오.

ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max

이제 테스트는 1048576으로 이동합니다.

그러나 1048576 이상으로 올릴 수는 없는 것 같습니다. 1048577을 Limits.conf에 넣으면 무시됩니다.

그 원인은 무엇입니까?

시스템 B

시스템 BI에서는 1048576에도 도달할 수 없습니다.

echo 99999999 | sudo tee /proc/sys/fs/file-max

/etc/security/limits.conf:

*                hard    nofile          1048576

여기에서 나는 다음을 얻습니다:

$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK

그 한계는 어디서 왔는가?

시스템 C

이 시스템에는limits.conf에 1048576 제한이 있고 /proc/sys/fs/file-max에 99999999가 있습니다.

그러나 여기서 한계는 4096입니다.

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK

(적어도) 1048576으로 어떻게 올리나요?

(자신에 대한 메모: 하지 마세요: echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max)

답변1

다음 내용 이 포함되어 있는지 확인하세요 /etc/ssh/sshd_config.

UsePAM=yes

여기에는 다음이 /etc/pam.d/sshd포함됩니다.

session    required   pam_limits.so

@venimus 아래 주석에는 1M 제한이 하드코딩되어 있다고 명시되어 있습니다.

커널 2.6.x 소스에는 ./fs/file.c:30:int sysctl_nr_open __read_mostly = 1024*1024; 1048676입니다

1048576은 프로세스별로입니다. 따라서 여러 프로세스를 가짐으로써 이러한 한계를 극복할 수 있습니다.

관련 정보