OpenLDAP 2.4出现Too many open files的解决方法
OpenLDAP是轻型目录访问协议LDAP(Lightweight Directory Access Protocol)的开源方案,其作用和Windows活动目录是一样的,可以对域下所有账户进行统一管理,避免出现每个系统使用不同账户的麻烦。近期在Centos7下部署了OpenLDAP,版本为2.4。在初期运行都很正常,几天后发现在每天凌晨会有程序无法正常工作,查看OpenLDAP日志发现每当出现connection lost时都会跟着出现一句“warning: cannot open /etc/hosts.allow: Too many open files”的提示,如图:
熟悉Linux的朋友应该都知道这个是说文件描述符达到了上限,于是根据出错的时间节点查看Zabbix的监控,发现该服务器连接数最高时期也就只有1000,使用以下命令可以查看系统当前连接数:
netstat -nat|grep ESTABLISHED|wc -l
使用tailf对OpenLDAP日志进行监控,然后运行程序做测试,发现每当连接数达到1000时就会出现问题,于是得出结论——连接数达到1000时OpenLDAP会出现warning: cannot open /etc/hosts.allow: Too many open files的问题。
既然知道是文件描述符的问题,那么修改不就可以了吗?可是当查看ulimit时发现系统设置的文件描述符是65535,而查看OpenLDAP进程所运行的文件描述符却是1024,也就是说OpenLDAP并没有使用系统的文件描述符,而是按照自己的规则在工作,使用命令查看后发现果然被限制到了1024
cat /proc/`pidof slapd`/limits #查看slapd进程的描述符信息
通过百度谷歌查了整整一天也只能查到一堆过期信息,比如修改/etc/sysconfig/ldap、修改ldap.conf等,这些都是历史版本的解决方法,在Centos 7和OpenLDAP新版本中已经没法这样解决。万幸的是在一日本网站上找到了最终解决方法,只需要在启动脚本的[Service]标签中增加一行LimitNOFILE=8192并重启服务即可修改原有的文件描述符。启动脚本修改后的内容如下:
重新加载启动脚本并重启服务
systemctl daemon-reload
systemctl restart slapd
再次查看OpenLDAP的文件描述符已经成功修改。运行程序测试也一切正常,完美解决!
评论