2011-08-09 11 views
2

ThreadPoolExecutorに問題があります。何時間もうまく動作しますが、(ランダムな時間に、時には2分または3時間後に)送信されたタスクの実行が停止し、プログラムがハングアップすることがあります。Java ThreadPoolExecutorはしばらくしてから作業を停止します

キューは満杯で、この時点ですべてのcorethreadがアクティブです。

これはどこから来たのか分かりません。特に、すべてのコアスレッドが常に働いている間に、3時間働くことがあるためです。

私に提案がある人がいれば、とても幸せです。

+2

これはデッドロックです。スレッド間でどのようなコードが共有されていますか? Redneckデバッグ:デバッグモードでアプリケーションを実行し、ロックするまで待ち、デバッガに接続してjvmをサスペンドすると、すべてのスレッドがどのポイントにあるかを確認できます。 –

+0

デッドロックの疑いがある場合は、すべてのスレッドのスタックトレースをダンプします。 Windowsでは、Control-Breakキーを押すことで実行されます。スレッドが同期しているものと待っているものを見てください。 –

+0

必ずしもデッドロックである必要はありません。 – erickson

答えて

0

WebページをダウンロードするI/O操作を行うコードで同様の問題が発生しました。いくつかの時点で、時には、数分または数時間で、スレッドがI/O操作を実行して停止し、動作を停止します。

この場合は、中絶の時間を設定します。

デバッガでコードを実行し、アプリケーションが停止したときに、スレッドが最後に実行したメソッドを確認してください。

1

テイクa look at the stack dump.これは、スレッドが何らかのブロッキング操作、決して起こらない状態、作業中、またはデッドロック状態になるのを待っているかどうかを示します。

0

あなたはどこかにメモリリークを持っている可能性があり、それは数時間

関連する問題