2

他の環境では再現できない BTS の本番環境に問題があります。ここで我慢してください。

私たちのソリューションの一部であるオーケストレーション (orch1) は、直接バインドされたメッセージをメッセージ ボックスに送信し、一方のブランチで相互に関連付けられた受信シェイプを使用し、もう一方のブランチで遅延 (受信タイムアウトを実装) を使用してリッスン シェイプにステップ インします。遅延は 10 分に設定されています。

直接バインドされたリクエストは別のオーケストレーション (orch2) によって処理され、orch1 がそれ​​を取得できるように、(再び直接バインドを介して) メッセージ ボックスに応答が返されます。

何が起きているかというと、このタイプの操作の約 50 回に 1 回、orch1 でタイムアウトが発生し、orch2 からの応答が戻ってきたときにルーティング エラーが発生します (これは、orch1 でのメッセージのインスタンス サブスクリプションとして予想されることです)。削除されました)。

奇妙なことに、orch1 でタイムアウトが発生するまで orch2 は初期化すらされません (次のスクリーンショットを参照)。

Orch1 タイミング

ここでは、orch1 がダイレクト バインド リクエストをメッセージ ボックスに送信し、10 分後にタイムアウトになっていることがわかります。リクエストは 11:26:31 に送信され、タイムアウトは 11:36:32 にヒットします。

Orch2 タイミング

これは orch2 のタイミングを示しています。ご覧のとおり、orch1 でタイムアウトが発生した後 (11:36:45) にのみ、受信シェイプがヒットされています。

奇妙なのは、orch1 と orch2 の両方が同じホストでホストされていることです。さらに、負荷分散されたクラスターがあり、このホストの 2 つのインスタンスを使用して作業を行うことができます。したがって、入ってくる作業を処理するために、orch2 には常に可用性があるはずです。しかし、そうではないようです。

私の現在の疑いは、両方のホスト インスタンスでスレッドが枯渇していることです。しかし、私の質問は

  1. これは賢明な疑いですか?
  2. 私は根本的に間違ったことをしていますか?
  3. スレッドに影響を与えるリッスン シェイプの使用について何かありますか?

ホスト スレッド設定を推奨レベル (MaxIOThreads = 100、MaxWorkerThreads = 100、MinIOThreads = 25、MinWorkerThreads = 25) に構成済みであることに注意してください。

4

1 に答える 1

0

競合状態のように聞こえますが、どこにあるのかわかりません。

タスクを分離することを検討しましたか?

  1. orch1 の最初の部分がリクエストを送信します。
  2. Orch2 は、タスク 1 からの出力を処理します。
  3. orch1 の 2 番目の部分は、orch2/Task 2 からの応答を処理します。

欠点は、これにはタイムアウトに応答する機能がないことです。それがあなたの問題にとって重要かどうかはわかりません。

于 2012-06-18T19:05:26.030 に答える