4

サーバーの起動時に作成される実行サービスを使用するサーバーがあります。

simpleExecutorService = Executors.newFixedThreadPool(nThreads, new MyThreadFactory(threadFactoryName));

次に、executor サービス インスタンスを使用してタスクを実行します。しかし、しばらくすると (30 分ほど)、次のようになります。

java.util.concurrent.RejectedExecutionException
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)

エグゼキュータがシャットダウンされたときにこれが発生する可能性があることをここで読みました。シャットダウンしたことはありませんが、どうしてこれが起こるのでしょうか? このような問題をデバッグする方法のアイデアはありますか?

4

1 に答える 1

2

リンク先の同じページから:

メソッド execute(java.lang.Runnable) で送信された新しいタスクは、Executor がシャットダウンされたとき、および Executor が最大スレッドとワーク キュー容量の両方に有限の境界を使用し、飽和状態になったときに拒否されます。

作業キューがいっぱいで、スレッド数が上限に達している可能性がありますか?

それが何をしているのかについての可視性はありますか?JMX経由?付属のプロファイラー? ロギングをデバッグしますか? なんでも?

于 2013-01-09T17:38:26.237 に答える