ThreadPoolExecutor に問題があります。何時間も問題なく動作しますが、時々 (ランダムな時間に、時には 2 分または 3 時間後に) 送信されたタスクの実行が停止し、プログラムがハングします。
キューがいっぱいで、この時点ですべてのコアスレッドがアクティブです。
これがどこから来ているのか、私にはまったくわかりません。特に、すべてのコアスレッドが常に動作しているときに 3 時間動作することがあるためです。
私に提案をしてくれる人がいれば、とてもうれしいです。
ThreadPoolExecutor に問題があります。何時間も問題なく動作しますが、時々 (ランダムな時間に、時には 2 分または 3 時間後に) 送信されたタスクの実行が停止し、プログラムがハングします。
キューがいっぱいで、この時点ですべてのコアスレッドがアクティブです。
これがどこから来ているのか、私にはまったくわかりません。特に、すべてのコアスレッドが常に動作しているときに 3 時間動作することがあるためです。
私に提案をしてくれる人がいれば、とてもうれしいです。
スタックダンプを見てください。これにより、スレッドが何らかのブロック操作を行っているか、決して発生しない状態を待機しているか、機能しているか、または本当にデッドロックしているかがわかります。
Web ページをダウンロードする I/O 操作を行うコードでも同様の問題がありました。ある時点で、場合によっては数分または数時間で、スレッドが何らかの I/O 操作を実行してハングし、動作を停止します。
このような場合は、中絶の時間を設定してください。
デバッガーでコードを実行し、アプリケーションが停止したら、スレッドが最後に実行したメソッドを確認します。
どこかでメモリリークが発生している可能性があり、それが数時間後にロックを引き起こしています
古いバージョンの JVM を使用していた場合は、 http://bugs.sun.com/view_bug.do ?bug_id=6822370に関連している可能性があります。これは 6u18 で修正されました。http://www.oracle.com/technetwork/java/javase/6u18-142093.htmlを参照してください。