Proxmox多LXC容器无法分配目录变化通知问题解决
今日Kaijia的Proxmox集群中有一台服务器异常不稳定,经常丢失状态,并且在执行任何操作时常常遇到错误提示:
Failed to allocate directory watch: Too many open files
检查了一下这台服务器上运行的LXC容器有30多个,当中不乏数据库、MongoDB、DA及爬虫等IO大户,然而利用lsof查看了一下当前使用的文件句柄亦无发现任何异常。
今日Kaijia的Proxmox集群中有一台服务器异常不稳定,经常丢失状态,并且在执行任何操作时常常遇到错误提示:
Failed to allocate directory watch: Too many open files
检查了一下这台服务器上运行的LXC容器有30多个,当中不乏数据库、MongoDB、DA及爬虫等IO大户,然而利用lsof查看了一下当前使用的文件句柄亦无发现任何异常。
Ubuntu长期支持版的HWE(硬件加强)是快速升级Linux内核的便捷方法,目前Ubuntu 16.04的HWE提供了4.8(linux-generic-hwe-16.04)和4.10(linux-generic-hwe-16.04-edge)两个内核版本。
通常为了采用新的或改进的技术,例如TCP_BBR和更新的KVM等等,Kaijia会将服务器升级到最新的HWE。然而HWE内核通常也会带来一个衍生问题——仅Linux内核获得了升级,动态内核模块(DKMS)等组件在APT仓库中均停留在原先的版本上,因此可能会产生不兼容无法通过编译的问题。这次Kaijia遇到的Xtables-addons DKMS无法通过编译就是在升级到HWE内核后产生的:
——————————
Deleting module version: 2.10
completely from the DKMS tree.
——————————
Done.
Loading new xtables-addons-2.10 DKMS files…
Building only for 4.10.0-21-generic
Building initial module for 4.10.0-21-generic
Error! Build of xt_ACCOUNT.ko failed for: 4.10.0-21-generic (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/xtables-addons/2.10/build/ for more information.
由于数据采集需要,而且流量并不大,不需要使用分布式爬虫,Kaijia使用使用一台服务器同时连接近百个SSH并生成Socket处理采集需求,一开始运行的相当流畅,但是大约数小时后终端便开始不停地弹出“accept: Too many open files”报错。
于是便简单地使用lsof命令查看了单个SSH进程使用的文件句柄数量:
1 |
lsof -p {PID} |
结果发现单个SSH比预想中的文件句柄使用率要多很多,连接繁忙(例如并发)的时候可以达到两三百,一般情况下只要Socket有数据传输就可能打开一百个文件句柄。考虑到同时运行的Socket数量较多,同时存在的文件句柄数量可能会超过Linux系统设置的上限,造成“accept: Too many open files”问题。
Kaijia之前写过《Ubuntu使用acpi_call关闭独立显卡》,介绍了如何通过向Linux内核中加入acpi_call模块以关闭独立显卡。最近在Ubuntu 12.04.1发布时更新内核后发现acpi_call在启动时无法自动加载(我的rc.local文件中还启动svnserve,无法加载的表现是SVN服务器也没有启动)。
- 已经载入全部文章 -
近期评论