java numa_Java只使用2个CPU中的1个和NUMA(Neo4J)
我正在研究一個java程序來創建一個非常大的Neo4J數據庫.我使用batchinserter和Executors.newFixedThreadPool來加快速度.我的Win2012R2服務器有2個cpu(2×6核心2×6超線程)和256GB NUMA架構.我的問題是,我的導入器只使用1個CPU(節點).
是否有可能只使用一個javaprocess的NUMA節點?
Java選項:-XX:UseNUMA -Xmx64g -Xms64g
解決方法:
目前尚不清楚每個節點分配了多少內存 – 是256GB還是128GB?無論哪種方式,據我所知,設置最大堆大小小于分配給節點的內存量通常意味著應用程序保持連接到單個節點.據我所知,在Windows,Solaris和Linux下都是如此.
即使您將JVM最大堆大小分配給節點分配的內存大小,如果堆不超過該大小,該進程也不會溢出,因為JVM對象分配器將始終嘗試在其中創建新對象.與創建線程相同的內存池 – 包括新的線程對象.
NUMA體系結構的主要設計目標是使不同的進程能夠在不同的CPU上運行,每個CPU都具有本地化的內存訪問權限,而不是讓所有CPU都爭用相同的全局共享內存.除非您可以安排特定線程始終使用與特定節點關聯的本地內存(線程關聯),否則在多個節點上運行相同的進程并不一定有效.否則,遠程內存訪問會降低您的速度.
我懷疑要在您的示例中使用多個節點,您需要將不同的任務分配給不同的節點,或者跨多個節點并行執行相同的任務.在后一種情況下,您需要確保每個節點在本地內存中都有相同數據的副本.有些庫可用于管理Java代碼中的線程關聯.
標簽:java,windows,neo4j,numa
來源: https://codeday.me/bug/20190702/1355122.html
總結
以上是生活随笔為你收集整理的java numa_Java只使用2个CPU中的1个和NUMA(Neo4J)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RPM常用命令整理
- 下一篇: JS 幻灯片代码(含自动播放)