节点因突发的内存不足错误而崩溃

时间:2019-11-29 18:38:44

标签: elasticsearch

我们当前正在使用热暖架构在71个节点中运行ES 6.5。我们有3个主节点,34个热节点和34个热节点。热节点具有64GB的RAM,其中30GB用于堆。在热节点中,我们有128GB的RAM和30GB的专用堆。

我们一直在热节点上遭受某些突然崩溃的困扰,这些崩溃仅在其接收速率达到峰值时才发生。由于群集很好,并且具有较高的摄取率,所以我认为我们还没有达到任何极限。当热节点崩溃时,我从堆中获得了堆转储,并且我看到80%的堆正由字节数组使用,这意味着80%的堆(24GB!)是我们要索引的文档的字节数组。

我还分析了在热节点崩溃之前正在热节点中执行的任务(GET _tasks?nodes = mynode&detailed),当时我发现该节点中有1300多个批量索引任务处于活动状态,而1300批量索引任务约为20GB!数据的。其中一些任务已运行40秒钟以上!一个健康的节点显示大约有100个正在执行的批量任务。

如果批量索引队列大小仅为10,为什么ES允许在一个节点中执行1300个批量索引任务?如果它已经在执行1300,应该拒绝批量请求吗?有没有一种方法可以限制一次在一个节点中执行的任务数量,并在我们超过某个限制时拒绝?

我想提到的是,热节点中根本没有运行查询。我还想提及一下,集群具有较高的接收率,并且运行良好,只是有时似乎某些节点陷入了许多索引批量请求的困扰,它们一直进入完整的gcs,这使节点从Out崩溃内存,其次是其余节点。当一个或两个热节点开始遭受Full GC影响时,其余的热节点完全正常。文件ID是由ES生成的,因此据我所知不应出现任何热点,如果有,应该一直在发生。

老实说,我的想法不多了,我不知道还有什么可以找出原因的。因此,任何帮助都会很棒!

谢谢!

0 个答案:

没有答案