近日, 出现在频繁登陆不了LDAP服务的情况, 登陆时总提示ldap_result: Can’t contact LDAP server (-1)的错误,
检查系统日志, 出现如下错误
slapd[1044]: warning: cannot open /etc/hosts.deny: Too many open files
基本上可以判断, slapd进程的文件句柄数量达到限制了.
原因分析
$ pidof slapd | xargs lsof -a -p | wc -l #查看slapd当前的文件句柄数量 $ cat /proc/`pidof slapd`/limits #查看系统对slapd进程的文件句柄数量限制 Limit Soft Limit Hard Limit Units …… Max open files 4096 4096 files …… $ ulimit -a #也可以通过这条命令来查看 …… open files (-n) 1024 ……
“open files (n) 1024 “是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目). 这个值可用ulimit命令来修改, 但ulimit命令修改的数值只对当前登录用
户的目前使用环境有效, 系统重启或者用户退出后就会失效.
cat /proc/sys/fs/file-max #查看系统总限制 cat /proc/sys/fs/file-nr #查看系统目前使用的文件句柄数量
解决办法
不想重启的话,可以按照如下办法来解决
$ vim /etc/init.d/slapd function start() { #找到start()函数 …… harg="$SLAPD_URLS" ulimit -HSn 4096 #添加这一行 …… $ /etc/init.d/slapd restart
然后可以切换到一个普通用户, 执行ulimit -a看看是否发生了变化.
建议采取的办法
$ vim /etc/security/limits.conf #添加如下两行,注意slapd进程使用的用户是ldap ldap soft nofile 4096 ldap hard nofile 4096
然后重启即可.
参考文档:
Troubleshooting slapd error: too many open files
====================================================
2016.07.27补充:
公司使用的OpenLDAP, 在/etc/security/limits.conf指了soft和hard均为4096, 重启以后现在soft limit又变成1024, 但hard limit变成了4096. 经过一翻搜索得知, 原来OpenLDAP进程启动时会自行修改soft limit. 解决办法为
$ vim /etc/sysconfig/ldap #指定如下参数 ...... SLAPD_ULIMIT_SETTINGS="-n 4096" ......
Ubuntu系统里可能是/etc/default/ldap(不确定).