昨天我们注意到我们的一个多处理器服务器上存在Java / Web Logic的特殊行为,所以想要了解它。
出于某种原因,Web Logic / Java仅使用可用两个处理器中的一个处理器。当我们运行一些重负载时,我可以看到CPU上的CPU几乎达到100%而另一个处理器完全空闲。这是否是虚拟机(但这不是虚拟机)是否重要
有趣的是,任何其他操作系统活动都表明两者都有处理器活动。
此致 _UB
答案 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 (;;) {
}
}
}