質問

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

JBoss Enterprise Application Server 4.3 CP08
JBOSSエンタープライズサービスバス4.4 CP04
JBOSSトランザクション4.2.3._CP07
JBOSSメッセージング1.4.0.SP3-CP09
JBossルール4.0.7
JBOSS JBPM 3.2.9
JBOSS Web Services 2.0.1.SP2_CP07

役に立ちましたか?

解決

私はそれを理解しました。それはスレッドのプールではありません。 jboss-messaging.sar/remoting-bisocket.xmlファイルには、jbossメッセージングのリモートコネクタを定義するファイルには、主にclientmaxpool、maxpoolsize、numacceptthreadsの値がいくつか表示されます。

リモートでは、ソケットが確立されたときに、「numacceptthreads」の値までそのソケットを監視するためにスレッドが作成されます。このスレッドは、ソケットからデータを読み取り、クライアントプールのスレッド(MaxPoolsizeに統治)に渡すことです。

WorkerThread#[]と呼ばれるスレッドは、Acceptスレッドを参照してください。私がより多くのプロデューサーを作成するときにもっと見る理由は、JBossメッセージングのビソボケット輸送が3つのソケットが作成されているようです。最初は3つありますが、5つのプロデューサーを作成すると、その数は15(または数学的に傾いていない人の場合は5*3)に増加します。それらが100%割り当てられている理由は、これらのすべてのメッセージを送信するとき、ソケットから読んだスレッド、サーバースレッドに引き渡し、ソケットからの読み取りに戻るためです(これは常にデータです)

したがって、簡単な答えは、これらのスレッドを管理するプールがないことです。スレッドを1つ以上受け入れることができますが、それはほとんど意味がありません。これは、そのジョブが非常に最小限であるため、データを読み取り、渡し、データを読み取るためです。

他のヒント

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

スイングプログラムが長期にわたるタスクを実行する必要がある場合、通常、バックグラウンドスレッドとも呼ばれるワーカースレッドの1つを使用します。ワーカースレッドで実行される各タスクは、javax.swing.swingworkerのインスタンスで表されます。スイングワーカー自体は抽象クラスです。スイングワーカーオブジェクトを作成するには、サブクラスを定義する必要があります。匿名の内部クラスは、非常にシンプルなスイングワーカーオブジェクトを作成するのに役立つことがよくあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top