최근에 아치 리눅스를 실행하는 호스트 시스템을 사용하여 권한이 없는 nspawn 컨테이너(CI용)에서 무언가를 구축할 때 너무 많은 파일을 열려고 한다는 것을 나타내는 원사에서 EMFILE 오류가 반복적으로 발생했습니다.
나는 시도했다:
- 컨테이너와 호스트를 추가
ulimit -n
하고 조정합니다/etc/limits.conf
. 그러나 주사위가 없습니다. 더 높은 한도가 보고되지만 오류는 계속 발생합니다. LimitNOFILE
컨테이너 파일에서 이 값을.nspawn
매우 높은 값으로 설정합니다. 아직 아무것도 없습니다(nspawn 호출 포함--settings=override
).- 설정하려면
LimitNOFILE=infinity
다음ulimit.conf
권장사항을 따르세요.https://serverfault.com/questions/848088/how-to-set-max-file-descriptors-for-a-container - 가능한 한 증가
fs.inotify.max_user_instances
하고fs.inotify.max_user_watches
통과하십시오 .sysctl
확실히EMFILE 오류가 발생합니다.
PrivateUsers=off
마침내 효과가 있었던 것은 다음 대화 상자에 따라 settings 를 통해 권한 있는 컨테이너로 전환하는 것이었습니다 .https://bbs.archlinux.org/viewtopic.php?id=232804. 또한 실패한 명령을 루트(컨테이너 내)로 실행해야 합니다.
그래서 내 질문은 다음과 같습니다.사용자 이름 간격이 ulimit와 상호 작용하는 방식, 그리고이것이 내 문제를 해결하는 이유이전 단계가 그렇지 않은 경우?
이와 같은 것을 디버깅해야 하는 다음 사람에게 도움이 될 좋은 정신 모델에 대한 보너스 포인트입니다.