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

테스트 횟수는 이제 1,048,576회에 이르렀습니다.

하지만 1048576 이상으로 올릴 수는 없는 것 같습니다. Limit.conf에 1048577을 넣으면 무시됩니다.

원인은 무엇입니까?

시스템 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;

1048576은 프로세스당입니다. 따라서 이러한 한계는 여러 프로세스를 통해 극복될 수 있습니다.

관련 정보