我面臨多核系統的可伸縮性問題。我的應用程序在4個物理核心機器上並行處理科學數據,8個邏輯核心啓用超線程。我們推出8個JVM,每個邏輯核心一個(我們最終可能會切換到一個JVM,以避免JVM的開銷)如何檢測多核可伸縮性/爭用問題
問題是可擴展性幾乎是線性的,最多4個核心,但我們幾乎沒有增加10-20通過增加4個「邏輯核心」來提高性能。
我通過剖析應用程序來分析線程行爲,並且看不到太多的鎖或線程。我也檢查了pidstat,我沒有看到例如過度的上下文切換開銷。更確切地說,java進程幾乎沒有上下文切換。 CPU使用率超高,幾乎達到100%,這似乎也沒問題。
我的問題是如何在超過物理內核數量後檢測並分析這種不良可擴展性的原因。我可以使用哪些工具和方法來檢測競爭的位置,我應該在哪裏查看並且能夠以某種方式修復它,而不會改變應用程序的體系結構(例如,切換到每臺計算機的一個JVM)
謝謝
感謝您的回答是明確的問題空間。我會看看緩存未命中的情況,並嘗試僅使用物理內核來運行一個想法。 – greg