2

WSO2 ESB がすべてのプロキシ (20 以上) をロードしていません。次に、起動スクリプトで次の 2 つの値を増やしたところ、機能しました。

-Dsnd_t_core=120
-Dsnd_t_max=600

しかしその後、WSO2 ESB のいくつかの致命的な問題に遭遇しました。いくつかの JMS プロキシがブロックされ、メッセージを消費しなくなりました。最悪の事態: carbon.log にエラーがありません!

さらに、サーバーの CPU 負荷が 100% に達しました。

再起動しても問題は解決せず、スケジュールされたタスクまたはプロキシを無効にするだけで問題が解決しました。

現在、VFS プロキシが正確に 120 のスレッド (JConsole) を作成していることを発見しました。各 transport.PollInterval で、新しい Thread を作成します。

-Dsnd_t_core と max にはどの値を使用しますか?

VFS プロキシが PollInterval ごとに新しいスレッド (jconsole を参照) を作成するのはなぜですか?

4

1 に答える 1

1

私の知る限り、WSO2 ESB スレッドは java.util.concurrent ThreadPool に基づいています。

このリンクでは、新しいスレッドをいつ作成するか、キュー メカニズム、タスク ポリシーの拒否など、ThreadPool の特性について読むことができます。

-Dsnd_t_core と max にはどの値を使用しますか?
-Dsnd_t_core は、ThreadPool 内のスレッドの最小数です。したがって、WSO2 ESB は -Dsnd_t_core を設定した分だけスレッドを自動的に作成します。デフォルト値は 20 です。-Dsnd_t_core を指定しない場合、WSO2 ESB は 20 個の vfs-worker を作成します。
-Dsnd_t_max は、ThreadPool 内のスレッドの最大数です。最大数に達すると、WSO2 ESB は新しいスレッドの作成を停止します。

VFS プロキシが PollInterval ごとに新しいスレッド (jconsole を参照) を作成するのはなぜですか?
WSO2 ESB は、次の条件で新しいスレッドを作成します。

  • 実行中のスレッドが corePoolSize よりも少ない場合、Executor は常に、キューに入れるよりも新しいスレッドを追加することを優先します。
  • corePoolSize 以上のスレッドが実行されている場合、Executor は常に、新しいスレッドを追加するよりも要求をキューに入れることを優先します。
  • 要求をキューに入れることができない場合、これが maximumPoolSize を超えない限り、新しいスレッドが作成されます。この場合、タスクは拒否されます。

したがって、キューがいっぱいでスレッドの最大数に達していない限り、WSO2 は新しいスレッドを作成してプロセスを処理します。PollInterval は、サービスがソース フォルダーからメッセージまたはファイルのポーリングを開始するまでの遅延を指定するために設定されます。

maxQueue 数を unbound (-1) に設定すると、キューがいっぱいになることはなく、新しいスレッドが作成されることもありません。

また、JConsole から何かを見つけました。1 サービス/1 プロキシ サービスは 1 スレッドのみで処理されます。私はまだこれを理解しようとしていて、1つのサービス/1つのプロキシサービスを2つ以上のスレッド(マルチスレッド)で処理しています。

これがあなたの質問に答えるのに役立つことを願っています:)

于 2013-04-09T07:55:57.710 に答える