gpt4 book ai didi

performance - 一个java进程可以使用多少个cpu核心?

转载 作者:行者123 更新时间:2023-12-04 21:24:17 24 4
gpt4 key购买 nike

我正在运行一些性能测试,以确定响应时间和处理各种 cpu/ram/os 配置并发的能力。我遇到的一个有趣发现是,看起来单个 jvm 使用 4 个内核比使用 2 个内核的性能更好(这并不奇怪),但是在第 4 个内核之外添加更多内核并不会带来任何显着的改进.但是,添加另一个带有负载平衡器(相同硬件)的 jvm 实例会带来显着的改进。

看起来单个进程在它可以使用的内核数量方面受到限制,这可能是由于进程一次可以产生的操作系统线程数量的限制。这是一个 64 位环境。

我使用 tomcat 并尝试更改“maxThreads”属性,但这对我希望处理的并发量没有影响。

还有什么其他原因可以解释吗?

最佳答案

通常,Java 应用程序会尝试在单独的内核上调度每个事件线程。这包括 GC 线程。如果应用程序一开始就不受 CPU 限制,那么添加更多内核不会有任何区别,因为线程被某些东西阻塞了。

对于 Web 应用程序,事情变得有点复杂。如果线程正在等待其他东西,例如来自数据库连接池的数据库,则增加线程池的大小不会有任何区别。您需要仔细查看负载均衡器和 Tomcat 配置。如果这些未正确调整,则很容易出现您描述的行为。

我不会太担心 JVM 可以拥有的线程数量有限。我经常在我们的生产系统中的每个 JVM 中看到 600 多个线程。我们使用 8 核机器,请求持续时间较短,因此这些线程大部分处于 I/O 等待状态。

关于performance - 一个java进程可以使用多少个cpu核心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6297567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com