2^21, Ubuntu 16.04를 초과하면 Openfiles 제한이 자동으로 감소됩니다.

2^21, Ubuntu 16.04를 초과하면 Openfiles 제한이 자동으로 감소됩니다.

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에서 설정한 제한으로 인해 시스템 호출에서 오류를 선택하고 무시할 수 있습니다. 아니면 어딘가에 오류가 기록될 수도 있습니다. 로그를 확인하세요.

관련 정보