3

ThreadPoolExecutor に問題があります。何時間も問題なく動作しますが、時々 (ランダムな時間に、時には 2 分または 3 時間後に) 送信されたタスクの実行が停止し、プログラムがハングします。

キューがいっぱいで、この時点ですべてのコアスレッドがアクティブです。

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

私に提案をしてくれる人がいれば、とてもうれしいです。

4

4 に答える 4

1

スタックダンプを見てください。これにより、スレッドが何らかのブロック操作を行っているか、決して発生しない状態を待機しているか、機能しているか、または本当にデッドロックしているかがわかります。

于 2011-08-10T19:45:03.077 に答える
0

Web ページをダウンロードする I/O 操作を行うコードでも同様の問題がありました。ある時点で、場合によっては数分または数時間で、スレッドが何らかの I/O 操作を実行してハングし、動作を停止します。

このような場合は、中絶の時間を設定してください。

デバッガーでコードを実行し、アプリケーションが停止したら、スレッドが最後に実行したメソッドを確認します。

于 2011-08-10T19:37:15.233 に答える
0

どこかでメモリリークが発生している可能性があり、それが数時間後にロックを引き起こしています

于 2011-08-10T19:55:49.083 に答える
0

古いバージョンの JVM を使用していた場合は、 http://bugs.sun.com/view_bug.do ?bug_id=6822370に関連している可能性があります。これは 6u18 で修正されました。http://www.oracle.com/technetwork/java/javase/6u18-142093.htmlを参照してください。

于 2011-11-14T21:21:29.527 に答える