如何使WebLogic使用多处理器计算机上的所有处理器

时间:2009-08-21 20:34:48

标签: java weblogic multiprocessor

昨天我们注意到我们的一个多处理器服务器上存在Java / Web Logic的特殊行为,所以想要了解它。

出于某种原因,Web Logic / Java仅使用可用两个处理器中的一个处理器。当我们运行一些重负载时,我可以看到CPU上的CPU几乎达到100%而另一个处理器完全空闲。这是否是虚拟机(但这不是虚拟机)是否重要

有趣的是,任何其他操作系统活动都表明两者都有处理器活动。

此致 _UB

3 个答案:

答案 0 :(得分:2)

在常见情况下,WebLogic(以及Java)应该能够使用运行它的服务器中的所有可用处理器。 WebLogic有一个请求处理线程池,当请求同时到达时,它们会同时处理。如果服务器有多个处理器,那么Java线程就应该使用它们。

如果在WebLogic中运行的Java Web应用程序在其servlet中使用SingleThreadModel,则没有两个线程可以同时执行servlet,因此您只能看到一个CPU在那里工作。不建议使用此型号,不管怎么说,我猜也没用过。

我听说有些人抱怨他们在运行虚拟机操作系统(如VMWare)时无法让他们的Java应用服务器使用超过1个CPU,即使他们为VM专用了多个CPU。我不知道这种奇怪行为的原因是什么。

也许您应该尝试使用并发请求来访问一些非常简单的JSP页面,并查看是否正在使用多于1个CPU。如果这样可行,则问题出在您的应用程序中。

答案 1 :(得分:1)

WebLogic文档就how to configure for multi-processor machines提供建议。你最终会得到一个集群环境。

答案 2 :(得分:0)

运行此Java程序以测试Java是否利用了所有可用的CPU(在我的情况下为8):

public class MultiThreadCPUEater implements Runnable {
    public static void main(String[] args) {
        for (int i = 0; i < 8; i++) {
            MultiThreadCPUEater multiThreadCPUEater = new MultiThreadCPUEater();
            Thread thread = new Thread(multiThreadCPUEater);
            thread.start();
        }
    }

    @Override
    public void run() {
        for (;;) {
        }
    }
}