권한이 없는 컨테이너에서 실행되는 프로세스의 최대 한도를 확인하는 방법은 무엇입니까?

권한이 없는 컨테이너에서 실행되는 프로세스의 최대 한도를 확인하는 방법은 무엇입니까?

최근에 아치 리눅스를 실행하는 호스트 시스템을 사용하여 권한이 없는 nspawn 컨테이너(CI용)에서 무언가를 구축할 때 너무 많은 파일을 열려고 한다는 것을 나타내는 원사에서 EMFILE 오류가 반복적으로 발생했습니다.

나는 시도했다:

  1. 컨테이너와 호스트를 추가 ulimit -n하고 조정합니다 /etc/limits.conf. 그러나 주사위가 없습니다. 더 높은 한도가 보고되지만 오류는 계속 발생합니다.
  2. LimitNOFILE컨테이너 파일에서 이 값을 .nspawn매우 높은 값으로 설정합니다. 아직 아무것도 없습니다(nspawn 호출 포함 --settings=override).
  3. 설정하려면 LimitNOFILE=infinity다음 ulimit.conf권장사항을 따르세요.https://serverfault.com/questions/848088/how-to-set-max-file-descriptors-for-a-container
  4. 가능한 한 증가 fs.inotify.max_user_instances하고 fs.inotify.max_user_watches통과하십시오 .sysctl확실히EMFILE 오류가 발생합니다.

PrivateUsers=off마침내 효과가 있었던 것은 다음 대화 상자에 따라 settings 를 통해 권한 있는 컨테이너로 전환하는 것이었습니다 .https://bbs.archlinux.org/viewtopic.php?id=232804. 또한 실패한 명령을 루트(컨테이너 내)로 실행해야 합니다.

그래서 내 질문은 다음과 같습니다.사용자 이름 간격이 ulimit와 상호 작용하는 방식, 그리고이것이 내 문제를 해결하는 이유이전 단계가 그렇지 않은 경우?

이와 같은 것을 디버깅해야 하는 다음 사람에게 도움이 될 좋은 정신 모델에 대한 보너스 포인트입니다.

관련 정보