저는 Archlinux에서 LXC를 실행하고 있습니다.
저는 각각 systemd를 기반으로 하는 Arch, Fedora, Centos, Debian 및 Ubuntu LXC 컨테이너의 조합을 가지고 있습니다.
19개가 넘는 LXC 컨테이너를 열려고 하면 20번째 컨테이너가 시작되지만 내부적으로 systemd가 실행되지 않습니다. ( , 및 ps aux
만 표시됨 )bash
init
ps
poweroff
LXC 컨테이너를 많이 실행할 때 centos 컨테이너가 때때로 "열린 파일이 너무 많습니다"라고 보고하기 때문에 이것이 열린 파일 수와 관련이 있을 수 있다고 생각합니다 . 그런데 파일 한도를 늘렸어요이 링크에서 언급했듯이, 재부팅하고 변경 사항을 확인했지만 문제가 지속됩니다.
원인은 무엇일까요?
답변1
권한이 있는(예: 루트) 컨테이너가 아닌 권한이 없는(예: 사용자 네임스페이스 사용) 컨테이너에서 문제가 발생하는 경우 컨테이너를 실행하는 동일한 사용자의 inotify 인터페이스 사용이 제한되었기 때문일 수 있습니다. 분명히 systemd는 inotify에 의존합니다. 데비안 버스터 LXC 패키지에는 sysctl을 완화하는 fs.inotify.max_user_instances
설정이 포함되어 있습니다./etc/sysctl.d/30-lxc-inotify.conf
:
# Defines the maximum number of inotify listeners. # By default, this value is 128, which is quickly exhausted when using # systemd-based LXC containers (15 containers are enough). # When the limit is reached, systemd becomes mostly unusable, throwing # "Too many open files" all around (both on the host and in containers). # See https://kdecherf.com/blog/2015/09/12/systemd-and-the-fd-exhaustion/ # Increase the user inotify instance limit to allow for about # 100 containers to run before the limit is hit again fs.inotify.max_user_instances = 1024
이것이 설정에 대한 문서말하다:
/proc/sys/fs/inotify/max_user_instances
이는 실제 사용자 ID당 생성할 수 있는 inotify 인스턴스 수의 상한을 지정합니다.
LXC 설치에 이러한 설정이 포함되어 있지 않으면 호스트 시스템에서 실행 중인지 확인할 수 있습니다.
sysctl -w fs.inotify.max_user_instances=1024
문제를 해결할 것입니다.