service tomcat start (中ではデーモン起動)
とかでtomcatを起動している環境で使っているときにToo many opne filesとでてしまうときの対処法。
もちろん、根本的にはバグとかでファイルクローズしていないかも並行して調査が必要ですが、インフラ的には
デフォルト省略値の「ulimit -n 1024」を「ulimit -n 8192」とかにすれば解決。
しかし、問題はどこにulimitを記述するか。
ネット上には
- /etc/security/limits.conf
に書けばOKという情報も多いのですが、今回の場合はこれはアウト。
理由はデーモン起動ではpam認証を使わないので/etc/security/limits.confは使えないから。
これ、設定して確認して安心して後日リブートすると上限値が戻ってしまい再現という最悪の結末になりますので本当に注意を。
正解は、/etc/rc.d/init.d/tomcat なスタート用シェルに追記すること
例)
start() {
ulimit -n 8192
$DEAMON \
...
今回は以下の情報に助けられました。
http://yumewaza.yumemi.co.jp/2010/07/limitsconf.html
http://www.matsuaz.com/matsumotojs/2010/12/24/1293117835413.html