环境:
我使用CentOS-7作为一个管理程序,在libvirt下运行几个LXC。每个容器运行最小的CentOS-7安装,并减少FreePBX (星号、Apache、MySQL +位)。
症状:
有16个集装箱运行时没有任何问题。当我再次启动一个容器时,它确实启动了,但是在第17个容器启动后,我无法在任何一个容器中执行systemctl start/restart/stop :
[root@test-lxc ~]# systemctl restart dnsmasq
Error: Too many open files<#>诊断:
以下诊断和计数是在第17次LXC运行和systemctl restart blabla失败时完成的:
我可以对任何LXC进行ssh操作,并运行大多数基本命令,例如ls,等等。我怀疑这个限制在某种程度上只影响到systemd。
我正在努力弄明白我在哪里/为什么达到极限。
[root@lxc-hypervisor]# sysctl fs.file-nr
fs.file-nr = 29616 0 12988463这并没有被调整,这正是发生在默认安装中的情况。与上述相同,管理程序报告的最大值(最后)值= 12988463,每个LXC内部也是如此。在每个LXC中也报告了非常相似的第一个值(略低于30000 )。
当我试图计算每个LXC中所有进程的文件描述符时,我在每个LXC中得到的顺序是400 ~ 500。
for pid in $( ls /proc/ | grep -E -e "^[0-9][0-9]*\$" ); do
ls -l /proc/${pid}/fd/ 2> /dev/null | wc -l
done总数约为9000 (9k),没有管理程序本身。当我在系统管理程序上运行它时,我通常得到可疑的接近值,略高于10000,例如10005。
问题:
Q1。设置或继承的限制在哪里?
Q2。为什么这个限制会影响systemctl start/stop/restart blah命令,但我仍然可以将ssh放到LXCs中,运行命令,比如带有循环的bash脚本,这些循环虽然是根命令,但是分叉很多。
Q3。如何调整限制以允许运行更多的LXC。据我所知,RAM和其他资源并不是有限的。
我确实读过许多关于文件描述符限制的文章和答案,但是我看不出我的系统在哪里达到了限制。
欢迎提供任何其他相关信息。
发布于 2023-05-26 09:21:36
我相信你不是达到了全球极限,而是达到了一个国际极限。这可以在运行systemd的容器上看到,因为systemd使用inotify工具进行簿记,但是主机也会受到影响。不使用systemd (或inotify)的容器可能不会受到影响。
/proc/sys/fs/inotify/max_user_instances:这指定了每个实际用户ID可以创建的inotify实例数量的上限。
如果只有非根(即容器中的根是真正的根)容器在使用,那么根用户就成为瓶颈。使用相同的无根用户映射的多个容器也会给该容器的根用户造成这样的瓶颈(但不会影响主机)。缺省值是128,对于容器使用来说太少了。
CentOS7 (或Rocky9)在LXC中不包括任何默认设置。在主机上基于Debian的发行版包括此文件:
/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因此,您应该通过在主机上创建这个文件来做同样的事情。为立即生效(对主机):
sysctl -w fs.inotify.max_user_instances=1024https://unix.stackexchange.com/questions/747085
复制相似问题