【OpenLDAP】再起動時にlimits.confのファイルディスクリプタの上限値が反映されない【Ubuntu】
UbuntuにてOpenLDAPを使っていた時のこと。
ファイルディスクリプタの上限値を増やそうとして、再起動するとOpenLDAPのプロセスの上限値が反映されなかったのでその対処法のメモ。
続きは以下より。
問題点
LDAPの負荷テストをして、1000セッションあたりからなんだか調子がおかしくなってきた。
lsofとかでldapのファイルディスクリプタ数みると1000ちょい付近で上がらなくなるのでおそらくそこが原因かなと考えた。
自分のldapのログでは確認されなかったけど、多分too many open filesとか普通は出てるんじゃないかなぁと。
(別件だけどOracleのASMが、これが原因で落ちたりしてたなぁ…)
そこでファイルディスクリプタの上限値を増やそうと思い、/etc/security/limits.confの値に以下のように記載した。
1 2 |
openldap soft nofile 65536 openldap hard nofile 65536 |
また、/etc/sysctl.confにも以下の値を記入。
1 2 |
fs.file-max = 6815744 fs.aio-max-nr = 1048576 |
この状態でslapdを再起動してみるとちゃんと反映されているようにみえる。
1 2 |
grep "Max open files" /proc/`pidof slapd`/limits Max open files 65536 65536 files |
しかし、OSごとrebootし、起動した直後に再度確認してみると。。。
1 2 |
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に仕込んでみる
1 |
echo “ulimit -n” >> /etc/init.d/slapd |
で、OS再起動してみたが
結果:惨敗
ULIMIT_SETTINGS
ちなみに OpenLDAP 2.3 系の場合は次のように書くようです。パラメーター名が若干違います。
1 ULIMIT_SETTINGS="-n 8192"
Ubuntuには/etc/sysconfig/ldapなるものがないので、/etc/defaults/slapdがそれっぽいのでそこにいれてみる。
そして再起動!!
結果:だめ!!!!!!
/etc/default/slapdにulimitを入れる
I should set ulimit in the /etc/default/slapd and it will work.
というのでulimitの設定をいれてみる
1 |
echo “ulimit -n 65536” >> /etc/default/slapd |
そして再起動してみると。。。
キタ━━━━(゚∀゚)━━━━!!
1 2 |
grep "Max open files" /proc/`pidof slapd`/limits Max open files 65536 65536 files |
無事設定されましたー!
結論
結果として/etc/default/slapdにulimitを入れればOSが再起動してもファイルディスクリプタが反映されるようです。