环境:
我使用 CentOS-7 作为虚拟机管理程序,在libvirt
. 每个容器都运行 CentOS-7 的最小安装以及精简的 FreePBX(Asterisk、Apache、MySQL + 位)。
症状:
有16个容器正在运行,没有任何问题。当我再次启动一个容器时,它确实会启动,但在第 17 个容器启动后,我无法systemctl start/restart/stop <anything>
在任何容器中执行以下操作:
[root@test-lxc ~]# systemctl restart dnsmasq
Error: Too many open files
Run Code Online (Sandbox Code Playgroud)
诊断:
以下诊断和计数是在第 17 个 LXC 运行且systemctl restart blabla
出现故障时完成的:
我可以 ssh 到任何 LXC 并运行最基本的命令,例如 ls 等。我怀疑该限制在某种程度上只影响systemd
.
我试图理解我在哪里/为什么达到了极限。
[root@lxc-hypervisor]# sysctl fs.file-nr
fs.file-nr = 29616 0 12988463
Run Code Online (Sandbox Code Playgroud)
这没有经过调整,这只是默认安装的情况。与上述相同,最大(最后)值 = 12988463 由虚拟机管理程序报告,并且也在每个 LXC 内部。每个 LXC 中也报告了非常相似的第一个值,略低于 30000。
当我尝试计算每个 LXC 内所有进程的文件描述符时,我在每个 LXC 中得到的顺序是 400 ~ 500。
for pid in $( ls …
Run Code Online (Sandbox Code Playgroud)