FishEyeでToo many open fileが出た
現象
クライアント側からgit cloneしようとしたら400が返ってきてアレ?!となった。
サーバ側のログを見てみたらこんなエラーが出てた
Caused by: java.io.IOException: Cannot run program "git" (in directory "/opt/atlassian/fisheye/var/cache/APE-Sapporo/clone"): java .io.IOException: error=24, Too many open files
サバ側で軽く調べてみたらこんな感じ
再起動後に調べてみたのでまだセーフだけど、けっこうぎりぎりなのかな
$ sudo /usr/sbin/lsof -p [FishEyeのpid] | wc -l 982
デフォルトで開けるファイルディスクリプタの上限は1024だった。ついでにプロセスの値を見てもそうなってた
- プロセスにかかってるファイルディスクリプタの上限
$ cat /proc/[pid]/limits | grep "open files" Max open files 1024 1024 files
対応
安直だけど、サーバ側の上限を上げてやることにします
/etc/security/limits.confを編集してやるのが早いんだけど、それだと全プロセスに影響するからちょっとやだなー・・・
ということで、FishEyeの起動スクリプトにulimitを追加しました。
- diffはこんな感じ
$ diff /opt/atlassian/fisheye/bin/fisheyectl.sh{,.org} 55c55 < nohup sh -c "ulimit -n 2048 && exec $FISHEYE_CMD $@ $FISHEYE_ARGS >> $FISHEYE_INST/var/log/fisheye.out 2>&1" & --- > nohup sh -c "exec $FISHEYE_CMD $@ $FISHEYE_ARGS >> $FISHEYE_INST/var/log/fisheye.out 2>&1" &
- 再起動して制限を確認すると増えてた
$ cat /proc/[pid]/limits | grep "open files" Max open files 2048 2048 files
ちなみに、このやり方だとFishEyeの起動ユーザをrootにしてやる必要がありました
$ sudo sh /opt/atlassian/fisheye/bin/fisheyectl.sh start