我们正在将Web应用程序从内存缓存解决方案中的ad hoc迁移到apache ignite集群,其中运行webapp的jboss用作客户端节点,两个外部vm用作点燃服务器节点。
使用一个客户端节点和一个服务器节点测试性能时,一切正常。但是,当在集群中使用一个客户机节点和两个服务器节点进行测试时,服务器节点会因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请求,每个请求启动一个进程,将几个条目写入caché。
答案 0 :(得分:0)
节点之间的通信会增加一些开销,因此显然1GB对于数据和Ignite本身是不够的。一般1GB是不够的,我建议至少分配2GB,每个节点更好4GB。
答案 1 :(得分:0)
最后问题不在于两个节点所需的内存量,而在于节点之间的同步。我的测试caché使用PRIMARY_SYNC运行,但是写入/读取循环比集群中的复制更快,最终导致不一致的读取,从而引发无限循环,为集群写入无限值。
更改为FULL_SYNC解决了问题。