저는 이것을 다양한 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은 프로세스별로입니다. 따라서 여러 프로세스를 가짐으로써 이러한 한계를 극복할 수 있습니다.