nofile
내 사용자(물론 권한 포함)에 대해 하드 및 소프트 제한을 설정하려고 시도하는 동안 sudo
이상한 동작을 발견했습니다 .
내 전체 시스템 제한은 2^22이고 2^23으로 설정한 후에도 다음 작업을 시도했습니다.
문제 없이 소프트 제한과 하드 제한을 2^20으로 완벽하게 설정했습니다. (이것은 이를 사용하여 샘플링한 후에 ulimit -Sn,and -Hn
방금 설정한 값을 얻는다는 의미입니다.)
2^21 이상으로 설정하면 사용자가 다시 로그인한 후(변경 사항을 적용하기 위해) 하드 제한과 소프트 제한이 각각 4096과 1024로 줄어듭니다.
온라인에서 이에 대한 정보를 찾을 수 없으며 이러한 값을 저장하는 데 사용되는 변수 유형과 관련이 있는 것으로 의심됩니다. (개인적으로는 약 2^32 또는 심지어 2^33일 것으로 예상합니다. 정의되었지만 uint
확실히 이 상황은 아닙니다).
답변1
시스템 전체에 두 가지 제한이 있는 것으로 보입니다.문서/sysctl/fs.txt
fs.file-max
전체 시스템에서 열린 파일(파일 핸들)의 최대 수입니다.fs.nr_open
프로세스당 열린 파일 수에 대한 전역 상한이며, 설정된 값을 제한RLIMIT_NOFILE
합니다ulimit -n
. 예상대로 기본값은 1024*1024, 즉 2^20입니다.
그래서:
# sysctl fs.nr_open
fs.nr_open = 1048576
# ulimit -Hn 1048577
-su: ulimit: open files: cannot modify limit: Operation not permitted
# sysctl fs.nr_open=$[ 2**22 ]
fs.nr_open = 4194304
# ulimit -Hn 4000000 # now it can be set
하지만 file-max
이것이 프로세스별 제한 설정을 막지는 못하는 것 같습니다. 저는 항상 다음과 같이 설정했습니다.
# sysctl fs.file-max
fs.file-max = 262144
따라서 어떤 제한이 설정되어 있더라도( pam_limits.so
?) sysctl에서 설정한 제한으로 인해 시스템 호출에서 오류를 선택하고 무시할 수 있습니다. 아니면 어딘가에 오류가 기록될 수도 있습니다. 로그를 확인하세요.