贪婪的线程在WebLogic下抓取了太多的JMS消息

时间:2010-07-21 13:56:21

标签: java jms weblogic distribution message-driven-bean

我们在WebLogic 8.1下遇到了一个问题,但我们无法解决这个问题。我们经常排队一百个或更多JMS消息,每个消息代表一个工作单元。尽管每条消息的大小相同并且看起来相同,但可能只需要几秒钟就能完成,而下一条消息则代表20分钟的固体运算。

我们的问题是,我们处理这些消息的每个消息驱动bean都会出现在一个似乎一次抓取10条消息的线程上(我们认为它是作为WebLogic优化完成的,以避免一次又一次地为小消息打队列)。然后,当一个接一个的线程完成所有小工作并且没有新工作进来时,我们最终会在长时间运行的工作中遇到一个单线程日志,最多有九个其他项目等待它完成,尽管事实上,其他线程是免费的,可以从这些工作单元开始。

现在我们正处于转换到WebLogic 10的地步,因此回归到这个问题并找出是否有任何我们可以实现的解决方案是自然的,以便:a)每个线程只抓取一个JMS消息一次处理并让所有其他人在传入队列中等待,或者b)它会自动将等待消息(甚至已经分配给特定线程的消息)重新分配给空闲线程。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

启用Forward Delay并提供适当的值。如果未在配置的时间内处理消息,这将导致JMS队列将消息重新分发给它的对等体。

每次从队列中取出一条消息可能有点过分 - 这是您正在处理的消息数量以及您衡量的问题的平衡。

WebLogic 10上的JMS也存在多个问题,具体取决于您的设置。从一开始就使用最新的MP,你可以省去很多时间和麻烦。

答案 1 :(得分:0)

当线程在获得可以执行的资源后处于“饥饿”状态时。饥饿线程被称为“贪婪线程”

相关问题