如何配置Tomcat使用1个以上的CPU?

时间:2010-09-17 09:44:36

标签: tomcat

我们有一个新客户端,目前我们正在使用100个并发http线程(使用Jmeter)对服务器进行压力测试。问题是即使我们有2个Xeon处理器(每个CPU有4个内核,总共8个内核),我只能看到tomcat使用4个内核而不是8个内核。这4个核心我相信它只属于1个处理器。其他4个线程实际上正在睡觉。

我从Apache文档中得到的印象是,如果我们有多CPU机器,我们应该配置acceptorThreadCount =“2”: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

我们已将默认连接器更改为tomcatThreadPool,其中maxThreads =“150”minSpareThreads =“4”,连接器执行器更改为acceptorThreadCount =“2”。但它仍然只使用1个CPU。

知道如何配置以利用所有内核(或所有CPU的处理器)吗?

2 个答案:

答案 0 :(得分:4)

一些随机的想法可以帮助你。

JVM将在内部自行安排任务。有时,如果JVM认为没有一个CPU过度征税,它可能会为关键操作保留一些内核。因此,您会看到正在使用某些核心而其他核心处于空闲状态。

另一种可能性是需要明确设置CPU亲和性。 在Unix中,您可以检查选择与taskset command ::

一起使用的JVM的CPU
taskset -p <pid>

在Windows中,打开任务管理器,转到流程选项卡,右键单击流程并选择设置Affinity。您可以看到设置要使用的CPU /核心。

我不知道Java / Tomcat中的启动参数来控制CPU使用率。我相信这应该是在操作系统级别上。我也不记得曾经读过有关正在编码的JVM以限制正在使用的CPU /内核数量。

答案 1 :(得分:4)

@JoseK的评论引发了整个瓶颈。我们的应用程序写了太多日志。在一个实例中,我们试图减少日志文件中的日志量,我们注意到整体性能更好,CPU利用率更高。

然后我们尝试用log4k日志级别来“WARN”,哇!该应用程序正在使用70%的CPU核心。

我们应该在询问问题之前检查磁盘利用率。谢谢!