3

昨天,我们注意到我们的一台多处理器服务器上的 Java/Web Logic 出现了一种特殊行为,因此想了解一下您的想法。

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

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

问候,_UB

4

3 回答 3

2

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

如果在 WebLogic 中运行的 Java Web 应用程序在其 servlet 中使用SingleThreadModel,则没有两个线程可以同时执行 servlet,因此您只能看到一个 CPU 在那里工作。不推荐使用此模型,我想反正用的不多。

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

也许您应该尝试使用并发请求访问一些非常简单的 JSP 页面,看看是否使用了超过 1 个 CPU。如果这有效,则问题出在您的应用程序中。

于 2009-08-21T21:27:44.117 回答
1

WebLogic 文档就如何为多处理器机器进行配置提供了建议。您最终会得到一个集群环境。

于 2009-08-21T20:45:18.523 回答
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 (;;) {
        }
    }
}
于 2012-07-12T16:30:18.030 回答