我面临多核系统的可伸缩性问题。我的应用程序在4个物理核心机器上并行处理科学数据,8个逻辑核心启用超线程。我们推出8个JVM,每个逻辑核心一个(我们最终可能会切换到一个JVM,以避免JVM的开销)如何检测多核可伸缩性/争用问题
问题是可扩展性几乎是线性的,最多4个核心,但我们几乎没有增加10-20通过增加4个“逻辑核心”来提高性能。
我通过剖析应用程序来分析线程行为,并且看不到太多的锁或线程。我也检查了pidstat,我没有看到例如过度的上下文切换开销。更确切地说,java进程几乎没有上下文切换。 CPU使用率超高,几乎达到100%,这似乎也没问题。
我的问题是如何在超过物理内核数量后检测并分析这种不良可扩展性的原因。我可以使用哪些工具和方法来检测竞争的位置,我应该在哪里查看并且能够以某种方式修复它,而不会改变应用程序的体系结构(例如,切换到每台计算机的一个JVM)
谢谢
感谢您的回答是明确的问题空间。我会看看缓存未命中的情况,并尝试仅使用物理内核来运行一个想法。 – greg