java.lang.OutOfMemoryError: Java heap space on ignite cluster

java.lang.OutOfMemoryError: Java heap space on ignite cluster

我们正在将 Web 应用程序从临时内存缓存解决方案迁移到 apache ignite 集群,其中运行 webapp 的 jboss 作为客户端节点,两个外部虚拟机作为 ignite 服务器节点。

用一个客户端节点和一个服务器节点测试性能时一切正常。但是在集群中使用一个客户端节点和两个服务器节点进行测试时,服务器节点崩溃并出现 OutOfMemoryError。

它启动的两个节点的虚拟机-server -Xms1024M -Xmx1024M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseTLAB -XX:NewSize=128m -XX:MaxNewSize=128m -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=1024 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:MaxGCPauseMillis=1000 -XX:InitiatingHeapOccupancyPercent=50 -XX:+UseCompressedOops -XX:ParallelGCThreads=8 -XX:ConcGCThreads=8 -XX:+DisableExplicitGC

知道为什么当单个节点完美运行时双节点集群会失败吗运行相同的测试?

我不知道它是否相关,但测试包括针对 JBoss 服务器启动的 10 个并行 http 请求,每个请求都启动一个进程,将多个条目写入缓存。

节点之间的通信会增加一些开销,因此显然 1GB 不足以容纳数据和 Ignite 本身。一般1GB不够用,我建议至少分配2GB,最好每个节点4GB。

最终问题不在于两个节点所需的内存量,而在于节点之间的同步。我的测试缓存是 运行 PRIMARY_SYNC,但 write/read 周期比集群中的复制更快,并最终导致读取不一致,从而引发无限循环,将无限值写入集群。

更改为 FULL_SYNC 解决了问题。