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

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

公開日: 

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

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

 
続きは以下より。

sponcer link

問題点

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

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

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

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

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

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

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

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

反映されてNEEEEEEEEEEEEEEEEEEEET!!

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

 

様々な対策法

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

 

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

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

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

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

で、OS再起動してみたが

 
結果:惨敗

 

ULIMIT_SETTINGS

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

 
 
 
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の設定をいれてみる

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

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

 

 
無事設定されましたー!

結論

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

  • このエントリーをはてなブックマークに追加
  • Pocket
PAGE TOP ↑