2010-12-06 19 views
2

jbossメッセージングインストールを5人のプロデューサが100,000個の100,000メッセージを生成してロードテストしています。私は大きなボトルネックを見ている。プロファイラを監視すると、WorkerThread#という15個のスレッドがあることがわかります。これらのスレッドは待機なしで100%割り当てられます。私は彼らが関連しているかもしれないと思う。誰もがこれらのスレッドサービスの機能とスレッドプール設定があるかどうかを知っていますか?私はSUPPJboss Messaging WorkerThread#これらのスレッドは何ですか?

のJBossエンタープライズアプリケーションサーバー4.3 CP08
のJBoss Enterprise Service Busは4.4 CP04
のJBossのトランザクションを使用しています4.2.3._CP07
JBoss Messagingの1.4.0.SP3-CP09
JBoss Rulesの4.0.7
のJBoss jBPMの3.2.9
のJBoss Web Servicesの2.0.1.SP2_CP07

+0

それぞれ100kの100,000メッセージを作成している場合、フルスロットルで複数のスレッドが動作しているのになぜ驚いていますか?確かにこれは良いことです。 – skaffman

+0

確かです。しかし、私のハードウェアは軽くたたかれていません。これはプールでなければなりません。なぜなら、サーバーがアイドリングしているときには、0%の割り当てで3つしかないから、100%で15にジャンプするからです。それから、私の応答時間はプーパの下に下がります。私はちょうどプールを叩いているようなものです。私はプール内にもっと多くのスレッドを持つベンチマークを走らせたいと思う。 – nsfyn55

答えて

2

私はそれを理解しました。そのスレッドのプールではありません。 Jboss Messagingのリモーティングコネクタを定義するjboss-messaging.sar/remoting-bisocket.xmlファイルには、主にclientMaxPool、maxPoolSize、numAcceptThreadsの2つの値があります。

リモートでは、ソケットが確立されると、そのソケットを "numAcceptThreads"の値まで監視するためのスレッドが作成されます。このスレッドが行うすべての処理は、ソケットからデータを読み取ってクライアントプール内のスレッドに渡します(maxPoolSizeによって管理されます)。

workerThread#[]というスレッドは、受け入れスレッドを参照します。より多くのプロデューサを作成すると、Jboss Messagingのbisocketトランスポートには3つのソケットが作成されているように見えます。最初は3つありますが、5つのプロデューサを作成すると、その数は15に増えます(数学的に傾いていない人は5 * 3)。彼らが100%割り当てられているのは、ソケットから読み取ったスレッドがサーバースレッドに渡され、ソケットから読み込みに戻ります(これは常にデータです)。

答えは、これらのスレッドを管理するプールがないことです。 1つ以上のスレッドを受け入れることはできますが、ほとんど意味をなさないでしょう。これは、その仕事が最小限であるため、データを読み、それを手渡し、データを読み込みます...したがって、より多くのスレッドが同期オーバーヘッドを追加するだけです。

-1

これはhttp://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.htmlからです。それが役に立てば幸い。

長期実行タスクを実行する必要がある場合、通常、バックグラウンドスレッドとも呼ばれるワーカースレッドの1つを使用します。ワーカースレッド上で実行されている各タスクは、javax.swing.SwingWorkerのインスタンスで表されます。 SwingWorker自体は抽象クラスです。 SwingWorkerオブジェクトを作成するためにサブクラスを定義する必要があります。匿名の内部クラスは、非常に単純なSwingWorkerオブジェクトを作成するのに便利です。

+0

これは間違いありません。以下の回答を参照してください。 – nsfyn55

関連する問題