【发布时间】:2023-03-30 06:52:01
【问题描述】:
我在调整 Elasticsearch 以提供高搜索查询性能时遇到了很多问题。这些是我的规格:
ES 设置: 版本:0.90.0,集群中有 2 个节点(m3.2xlarge aws 实例),每个 32GB RAM,50% 分配给 ES_HEAP_SIZE,无交换
数据: 75MM 文档,每个 25 个字段
针对基准的查询: 针对 5 个文本字段的多重匹配查询
高达 30 个请求/秒的输入查询频率,响应时间保持小于 1 秒。超过 30 多个请求/秒,性能下降,响应时间增加到 50 秒。虽然发生这种情况,但 JVM 堆是稳定的(在 bigdesk 中约为 7-8),并且 GC 也很稳定。但是,CPU 迅速增加,达到 800%(8 核),平均负载非常高 16。热线程不断在搜索和评分函数之间切换,如 BooleanScorer2.nextDoc、BooleanQuery.createWeight、DisjunctionSumScorer.advance、BufferedIndexInput.refill之类的
问题:您能否帮我找出在 30 个请求/秒后性能下降的原因,以及如何通过更改集群配置来解决这个问题。
提前致谢!
【问题讨论】:
-
你能增加搜索队列的大小,看看发生了什么
-
感谢 Vineeth 的建议。我尝试将搜索的线程池峰值从默认的 16 增加到 40。它对我可以支持的亚秒级延迟的最大请求数/秒没有影响。 CPU 仍然以 30 次请求/秒的速度达到最大值,此后响应时间下降。
标签: java database elasticsearch lucene elasticsearch-query