我们有一个新的客户端,当前我们正在对具有100个并发http线程的服务器(使用Jmeter)的生产进行压力测试。问题是,即使我们有2个Xeon处理器(每个CPU具有4核,总计为8核),我也只能看到tomcat使用4核,而不是8核。我认为4核仅属于1个处理器。其他4个线程实际上正在hibernate。
我从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的处理器)吗?
有一些随意的想法可以帮助您。
JVM将在内部进行自己的任务调度。有时,如果JVM不认为某个CPU负担过重,它可能会为关键操作保留几个内核。因此,您会看到一些核心正在使用,而另一些则处于空闲状态。
另一种可能性是需要明确设置CPU亲和力。在Unix中,您可以检查与taskset命令一起使用的JVM选择了哪个CPU :
taskset -p <pid>
在Windows中,调出任务管理器,转到“进程”选项卡,右键单击一个进程,然后选择“设置亲和力”。您可以看到已设置使用哪些CPU /内核。
我不知道Java / Tomcat中的启动参数来控制CPU使用率。我认为这应该在操作系统级别。我也不记得曾经阅读过有关编码JVM以限制所使用的CPU /核数的信息。