2009-07-04 8 views
1

まれな入力ドキュメントでOOMエラーが発生するNLPライブラリ(Stanford NER)を使用しています。Javaメソッド呼び出しのCPU /スタックを制限しますか?

最終的にこれらのドキュメントを分離し、エラーの原因を突き止める予定ですが、これは難しいです(私はHadoopで動作しているので、エラーは179%そんな感じ)。暫定的な解決策として、私はこの特定の呼び出しにCPUとメモリの制限を適用できるようにしたいと思います。

私はこれを行うための最善の方法がどうなるかわかりません。私の最初のしかし、1つのスレッドの固定スレッドプールを作成し、将来の時間get()を使用します。これは少なくとも私に多分役立つ可能性のある壁時計の制限を与えるでしょう。

私の質問は努力の合理的な量でこれよりも良い行うにはどのような方法があるかどうかです。

答えて

1

ちょうどそのとき、次のいずれかに移動し、あなたが上にあった文書化され、ログのOutOfMemoryErrorをキャッチ。ガベージコレクタは、次のドキュメントに十分なメモリがあることを確認します。

(これは、1つの文が長すぎるか、複雑に解析されている場合は、次の文に移動するために私がスタンフォード依存関係パーサーで使用する戦略の1つです)

2

私はHadoopのに慣れていないんだけど、(私の記憶が正しければ、サーバ用の64Mバイト)あなたのJVMがそれに課せられた暗黙の上位メモリ境界を持っていることを忘れないでください。私は、メモリ構成、あなたのJVMが、あなたは、このようにメモリ上限を指定することで、これを上書きすることができます(オプションhere

で実行されているかどうか確認します:

java -Xmx512m 

(例えば)に512Mビットに制限を設定します。 CPUの割り当てを設定する

は、JVMの付託外で、(あなたがすべてでそれを行うことができる場合)OS固有のメカニズムになります

あなたは、JVMから並列にこれらのジョブをディスパッチ実行している場合単一スレッド(または限られたスレッド)のスレッドプールが助けになるかもしれません。しかし、これはあなたの実装に依存し、より詳細な情報が必要です。

0

あなたがしようとしているすべては、「文書Xをマップしよう」、あなたはNLPライブラリへの呼び出しの周りにログイン置く必要があり、クラッシュされた文書を見つけ出すある場合。 OOMが表示されると、マッパーのログには運命の文書が含まれます。あなたが言ったように、その文書のどの特性がライブラリをクラッシュさせるのかを判断する必要があります。私の経験で

は、文書がインターネット上の人々によって作成された場合は特に、あなたはどこか狂った巨大な文書を検索します。その時点で、そのような文書で何をすべきかを決める必要があります。それらを無視するか、おそらくそれらを切り捨てます。

関連する問題