クローラーで OutOfMemory になった際の挙動について

(from osdn.net/users/leihcrev)
菊池です。度々すみません。

# 諸事情でメールの読み書きがしづらいもので、あまり機能面の話題ではないのですが、こちらに失礼します。

Crawler プロセスで OOM が発生し、IndexUpdater スレッドが死んでしまった場合に、クロールが継続しているようです。

「[fess-user 159] Re: ヒープメモリーに関して」を拝見したところ、クロール用スレッドを終了させる想定とのことでしたが、クロールが一巡するまで Crawler プロセスは終了しませんでした。

ログに「IndexUpdater is terminated.」は出ていました。

ちょっと追ってみたのですが、IndexUpdate スレッドで OOM 発生後、systemHelper.forceStop は true になっていました。systemHelper.currentProcess は null なので、destroyProcess() には行きません。

そのとき Web Crawling Process スレッドは WebFsIndexHelper#crawl() の S2Robot.awaitTermination() のループを回っていました。

このループでは systemHelper.forceStop を見ていないので、全ての Robot スレッドが終了するまでループを抜けないようでした。

S2Robot.awaitTermination() のループの中でも systemHelper.forceStop をチェックしてもよいのかと思うのですが、いかがでしょうか。

(from osdn.net/users/shinsuke)
ありがとうございます。

検討します。