【OpenLDAP】再起動時にlimits.confのファイルディスクリプタの上限値が反映されない【Ubuntu】

UbuntuにてOpenLDAPを使っていた時のこと。

ファイルディスクリプタの上限値を増やそうとして、再起動するとOpenLDAPのプロセスの上限値が反映されなかったのでその対処法のメモ。


続きは以下より。

問題点

LDAPの負荷テストをして、1000セッションあたりからなんだか調子がおかしくなってきた。

lsofとかでldapのファイルディスクリプタ数みると1000ちょい付近で上がらなくなるのでおそらくそこが原因かなと考えた。

自分のldapのログでは確認されなかったけど、多分too many open filesとか普通は出てるんじゃないかなぁと。

(別件だけどOracleのASMが、これが原因で落ちたりしてたなぁ…)

そこでファイルディスクリプタの上限値を増やそうと思い、/etc/security/limits.confの値に以下のように記載した。

openldap soft nofile 65536
openldap hard nofile 65536

また、/etc/sysctl.confにも以下の値を記入。

fs.file-max = 6815744
fs.aio-max-nr = 1048576

この状態でslapdを再起動してみるとちゃんと反映されているようにみえる。

grep "Max open files" /proc/`pidof slapd`/limits
Max open files 65536 65536 files

しかし、OSごとrebootし、起動した直後に再度確認してみると。。。

grep "Max open files" /proc/`pidof slapd`/limits
Max open files 1024 4096 files

反映されてNEEEEEEEEEEEEEEEEEEEET!!

ということで、設定値については一時的なもので、OSを再起動するとlimits.confなどの値を無視して初期値に戻されてしまうことがわかった。

様々な対策法

巷には様々な対策法があるので色々と試してみた。

起動スクリプトにulimitを仕込む

手動で再起動した場合は一時的にlimits.confの設定内容が有効になるだけなのです。
当然、マシン自体が再起動した場合はinitが各daemonを起動し、PAM認証が入らないため、OS規定の上限値である1024に戻ってしまいます。

どうりでOS再起動すると元に戻っちゃうわけです。

てことでここにある方法で同じようにslapdに仕込んでみる

echo “ulimit -n” >> /etc/init.d/slapd

で、OS再起動してみたが


結果:惨敗

ULIMIT_SETTINGS

OpenLDAP のログに too many open files が出る時の対策です。原因は、同時にオープンできるファイル数の上限に達したためです。対策は /etc/sysconfig/ldap ファイルの SLAPD_ULIMIT_SETTINGS パラメータに設定するとOKです。(当方の環境は CentOS 6.3 64bit、OpenLDAP 2.4 です)変更前はコメントアウトされてました。 #SLAPD_ULIMIT_SETTINGS="" 変更後。 SLAPD_ULIMIT_SETTINGS="-n 8192" 当方の環境ではファイルディスクリプタのデフォルトは 1024 でした…
OpenLDAP で Too many open files が出る時の対策 - Nanの備忘録 - Nanの備忘録

ちなみに OpenLDAP 2.3 系の場合は次のように書くようです。パラメーター名が若干違います

ULIMIT_SETTINGS="-n 8192"




Ubuntuには/etc/sysconfig/ldapなるものがないので、/etc/defaults/slapdがそれっぽいのでそこにいれてみる。

そして再起動!!

結果:だめ!!!!!!

/etc/default/slapdにulimitを入れる


Re: too many open files - www.openldap.org

I should set ulimit in the /etc/default/slapd and it will work.


というのでulimitの設定をいれてみる

echo “ulimit -n 65536” >> /etc/default/slapd


そして再起動してみると。。。


キタ━━━━(゚∀゚)━━━━!!

grep "Max open files" /proc/`pidof slapd`/limits
Max open files            65536                65536                files


無事設定されましたー!

結論

結果として/etc/default/slapdulimitを入れればOSが再起動してもファイルディスクリプタが反映されるようです。

mogmet

View Comments

Share
Published by
mogmet