我们有一个新客户端,目前我们正在对具有 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
我们已将默认连接器更改为 maxThreads="150"minSpareThreads="4"的 tomcatThreadPool,并将连接器执行器更改为具有 acceptorThreadCount="2"。但它仍然只使用 1 个 CPU。
知道如何配置以利用所有内核(或所有 CPU 的处理器)吗?
最佳答案
一些随意的想法可以帮助您。
JVM 会在内部进行自己的任务调度。有时,如果 JVM 不认为一个 CPU 负担过重,它可能会保留几个核心用于关键操作。因此,您会看到一些内核正在使用,而另一些则闲置。
另一种可能性是需要显式设置 CPU 亲和性。 在 Unix 中,您可以通过 taskset command 检查已选择 JVM 使用哪个 CPU。::
taskset -p <pid>
在 Windows 中,调出您的任务管理器,转到进程选项卡,右键单击一个进程并选择设置关联。您可以看到设置使用了哪些 CPU/核心。
我不知道 Java/Tomcat 中有启动参数来控制 CPU 使用率。我相信这应该在操作系统级别。我也不记得曾经读过有关对 JVM 进行编码以限制所使用的 CPU/内核数量的文章。
关于tomcat - 如何配置 Tomcat 使用 1 个以上的 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734229/