我的Neo4j HA群集(Neo4j版本2.1.2)中有8个实例 我使用新闻提要算法执行该技术的基准测试。 单个客户端每个实例同时执行50个读取(!)查询,目标是部署到所有实例的server plugin。 在所有实例从主服务器引导数据之后,基准测试开始。请求由客户端循环分发。
如果我使用一个包含3个或4个实例的集群,一切正常。 负载在所有实例中均匀分布(根据CPU负载),并且达到了低请求延迟。
然而,有8个实例,其中2个立即具有高请求延迟。 由于请求率较高,在3秒内它们从500ms增加到10s并且随着基准持续时间进一步增加 这些实例的CPU负载最大。 其余6个实例现在具有较低的CPU负载,因为客户端仍在等待待处理的请求 如果我不针对2个实例发出请求,则剩余的6个实例按预期执行 如果我更改了顺序,则相同的实例会阻塞,因此这与服务器ID无关 如果我从群集中删除其中一个实例,则另一个仍在阻止。
这似乎与特定实例有关,但所有8个实例的设置是相同的,因为它们是虚拟机。
日志文件也不包含提示。所有实例都在主人console.log
中标记为可用
是什么导致了这个问题,以及如何解决这个问题?
作为一个脏修复,我将启动一个包含10个实例的集群,只使用其中的8个,但这不是一个很好的解决方案。
修改: 由于节点属性上的索引创建,我观察到了类似的行为。 每个节点的第一个请求加载索引并等待10秒以使其可用,这在某些情况下时间太短。 我马上停止了基准测试。所有节点都获得高CPU负载,当CPU空闲时,我只需重新启动Neo4j服务器。 当他们再次上升时,索引可用 - 在大多数情况下。
因此,这可能与索引相关。在HA集群中创建索引的正确方法是什么?
答案 0 :(得分:0)
哦对不起,没看到你的代码?那么调用feed端点?
也许是记忆问题?插件是有状态的,以防你的Graphity-Instance保持状态,它可能会占用大量内存。
所以请启用gc-logging,看看是否有东西出现。