Proxmox多LXC容器无法分配目录变化通知问题解决

04/28/2019

今日Kaijia的Proxmox集群中有一台服务器异常不稳定,经常丢失状态,并且在执行任何操作时常常遇到错误提示:

Failed to allocate directory watch: Too many open files

检查了一下这台服务器上运行的LXC容器有30多个,当中不乏数据库、MongoDB、DA及爬虫等IO大户,然而利用lsof查看了一下当前使用的文件句柄亦无发现任何异常。

查阅了Proxmox官方论坛后发现也有高用量用户碰到过此问题,官方给出的提示是LXC容器消耗Linux内核的文件系统变化通知机制inotify,而默认安装的Proxmox OS系统设定的inotify数量限制是128,过多LXC容器,尤其是IO大户,同时运行时必然会耗尽inotify

因此问题的解决方案自然是提高inotify,短期的可以执行:

长期维护建议将此项及下述其他配置添加到/etc/sysctl.conf中:

上述参数将现有inotify容量扩大4倍(如为LXC数量为托管运行商级别可以继续扩大至16倍)。然后执行:

使之生效即可。