저는 이것을 다양한 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은 프로세스당입니다. 따라서 이러한 한계는 여러 프로세스를 통해 극복될 수 있습니다.