フォーラム: 【移行しました】機能要求 (スレッド #33152)

クローラーで OutOfMemory になった際の挙動について (2012-11-27 11:07 by leihcrev #66458)

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

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 をチェックしてもよいのかと思うのですが、いかがでしょうか。

メッセージ #66458 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: クローラーで OutOfMemory になった際の挙動について (2012-11-27 21:27 by shinsuke #66471)

ありがとうございます。
検討します。
#66458 への返信

メッセージ #66471 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする