2010-12-06 23 views
2

我正在负载测试一个jboss消息传递安装与5个生产者产生100,000 100k消息。我看到了重大的瓶颈。当我监视分析器时,我看到有15个线程名为WorkerThread#。这些线程被分配100%而不等待。我认为他们可能有关系。有谁知道这些线程服务的功能是否有线程池设置。我使用的是人联党Jboss Messaging WorkerThread#这些线程是什么?

JBoss企业应用服务器4.3 CP08
JBoss企业服务总线4.4 CP04
JBoss的交易4.2.3._CP07
的JBoss Messaging 1.4.0.SP3-CP09
的JBoss 4.0.7规则
的JBoss jBPM的3.2.9
的JBoss Web服务2.0.1.SP2_CP07

+0

如果您生产100,000条每条100k的消息,为什么您会惊讶于您有几条线程全速工作?当然这是一件好事。 – skaffman 2010-12-06 22:22:41

+0

当然。但是我的硬件并不是一成不变的。这必须是一个池,因为当服务器闲置时,0%分配中只有3个,然后以100%跳转到15。然后,我的回应时间就下降了。看起来像我可能只是在游泳池里。我想用游泳池中的更多线程运行一些bencmarks。 – nsfyn55 2010-12-07 15:53:33

回答

2

我已经想通了。它不是一个线程池。在为Jboss Messaging定义远程连接的jboss-messaging.sar/remoting-bisocket.xml文件中,您会看到一些值主要是clientMaxPool,maxPoolSize和numAcceptThreads。

在远程处理中,当套接字建立时,将创建线程以监视该套接字,最大值为“numAcceptThreads”。所有这些线程都会从套接字中读取数据并将其传递给客户端池中的线程(由maxPoolSize控制)。

称为workerThread#[]的线程引用接受线程。当我创建更多制作人时,我看到更多的原因是因为对于Jboss Messaging的双向传输,显然有三个套接字创建。最初有3个,但是当我创建5个生产者时,这个数字会增加到15(对于那些没有数学倾向的人来说,这个数字是5 * 3))。他们100%分配的原因是因为当我发送所有这些消息时,线程从套接字读取数据,切换到服务器线程,返回从套接字读取数据(总是数据)

因此,答案是没有池来管理这些线程。你可以有超过1个接受线程,但它几乎没有意义。这是因为它的工作非常简单,只需读取数据,交出数据,读取数据......因此,更多的线程只会增加同步开销。

-1

这是http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html;希望能帮助到你。

当Swing程序需要执行长时间运行的任务时,它通常使用其中一个工作线程,也称为后台线程。运行在工作线程上的每个任务都由javax.swing.SwingWorker的实例表示。 SwingWorker本身是一个抽象类,您必须定义一个子类才能创建SwingWorker对象;匿名内部类通常用于创建非常简单的SwingWorker对象。