1

WebLogic 8.1で、問題が発生しましたが、修正できませんでした。多くの場合、100以上のJMSメッセージをキューに入れます。各メッセージは、作業単位を表します。各メッセージは同じサイズで同じように見えますが、完了するのに数秒しかかからない場合がありますが、次のメッセージは20分間の確実なクランチを表します。

私たちの問題は、これらのメッセージの処理を行っている各メッセージ駆動型Beanが、一度に10個のメッセージを取得しているように見えるスレッドになってしまうことです(WebLogicの最適化として行われているため、小さなメッセージを何度もキューに入れます)。次に、次々とスレッドがすべての小さなジョブを終了し、新しいジョブが入らないため、最大9つの他のアイテムが終了するのを待っているにもかかわらず、1つのスレッドログが長時間実行されている作業に詰まってしまいます。他のスレッドは無料であり、それらの作業単位で開始できるという事実。

これで、WebLogic 10に変換しているところなので、この問題に戻って、次のいずれかを実装できる解決策があるかどうかを確認するのが自然なポイントです。a)各スレッドがで1つのJMSメッセージのみを取得する処理して他のすべてのメッセージを着信キューで待機させたままにする時間、またはb)待機中のメッセージ(特定のスレッドにすでに割り当てられているメッセージも含む)を空きスレッドに自動的に再配布します。何か案は?

4

2 に答える 2

1

Forward Delay を有効にして、適切な値を指定します。これにより、構成された時間内にメッセージが処理されなかった場合、JMS Queue はメッセージをピアに再配布します。

毎回 1 つのメッセージをキューから取り出すのはやり過ぎかもしれません。処理しているメッセージの数と問題として評価するものとのバランスです。

設定によっては、WebLogic 10 の JMS にも複数の問題があります。最初から最新の MP を使用することで、多くの時間と手間を省くことができます。

于 2011-02-10T19:04:31.123 に答える
0

実行可能なリソースを取得した後、スレッドが「飢餓状態」にある場合。「貪欲なスレッド」と呼ばれる飢餓状態にあるスレッド

于 2011-08-05T02:04:41.627 に答える