我试图诊断我们的ElasticSearch搜索队列似乎随机填满的问题。
我们在监视器中观察到的行为是,在我们集群的一个节点上,搜索队列增长(只有一个),在搜索线程池用完之后,我们开始获得超时。似乎有一个查询阻止了这件事。我们目前解决问题的唯一方法是重新启动节点。
您可以在下面看到图表中的相关行为:首先是队列大小,然后是待处理的集群任务(以显示没有其他操作阻塞或排队,例如索引操作等),最后是搜索的活动线程线程池。 11点钟的尖峰是节点的重启。
在我们重新启动节点之前,所有节点上的日志文件在问题发生之前或之后的一小时内都没有显示任何条目。只有大约200到600毫秒的垃圾收集事件,相关节点上只有一个垃圾收集事件,但事件发生前约20分钟。
我的问题: - 我如何调试它,因为在失败或超时查询的任何地方都没有记录信息? - 这有什么可能的原因?我们没有动态查询或类似的东西 - 当发生这种情况时,我可以设置查询超时或清除/重置活动搜索以阻止节点重启吗?
根据迄今为止的问题,还有一些不适用的细节:
队列建立1分钟后的热线程处于https://gist.github.com/elm-/5ed398054ea6b46522c0,一些转储的几个快照片刻。
答案 0 :(得分:1)
这是一次非常开放式的调查,因为可能存在许多错误。流氓查询可能是最明显的原因,但问题是其他节点不受影响的原因。我认为最相关的线索是,为什么这个节点如此特殊。
要看的事情:
mlockall
,看看它是否设置为true
。答案 1 :(得分:1)
Andrei Stefan的回答并没有错,但我首先要看看来自堵塞节点的hot_threads,而不是试图弄清楚节点可能有什么特别之处。
我不知道你在队列中查看的方法。像安德烈说的那样,慢速日志是一个好主意。