natural born minority
この話は、完全に個人用忘備録です。責任は持てません。
TomcatでJenkins(JavaのWebアプリ)を運用していた際、このようなエラーが出ました。
“Too many open files”
再起動したり設定読み込み直したりすると状況が変わるため、非常にタチが悪いものです。
アプリ側にJavaの例外として通知されるのが余計にわかりにくいですが、どうやら…
「Linuxにおけるファイルディスクリプタの制限」
に引っかかっているらしい。
簡単に言うと「1ユーザの1プロセスに多量のファイルを開かせてやるものかあぁぁ!」という制限のようで。
確認方法は、
ulimit -n
で、初期値は1024のよう。(このコマンドで他の制限も確認・設定可能)
かたや、tom猫さんが開いているファイル数はというと…
# PID特定
ps aux | grep tomcat
tomcat 9999 ~
# PIDが開いているファイル数をチェック
/usr/sbin/lsof -p 9999 | wc -l
1578
なるほど、余裕で超えてますね…。
ulimit コマンド自体でも変更できるのですが、そのユーザ&一時的なものなので、これの「大元の設定ファイル」を弄う。
vi /etc/security/limits.conf
末尾に以下を足します。※数は2倍+切りの良い数字にした。
tomcat hard nofile 4096
これで解消しました。
ただ、いろいろググっていると「無尽蔵に増えていく」らしいので、いつか足さないといけないのかな?