我在调整Elasticsearch时遇到很多问题,以提供高搜索查询性能。这些是我的规格:
ES设置: 版本:0.90.0,集群中有2个节点(m3.2xlarge aws intances),每个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个req / sec后性能下降的原因以及如何通过更改群集配置来解决这个问题。
提前致谢!
答案 0 :(得分:0)
我知道您已经看到了CPU限制行为,但是当您开始遇到性能问题时,您是否看到任何I / O峰值?
如果您将索引存储在EBS卷上,我不会对像您这样的测试开始看I / O饱和感到惊讶。 M3实例具有快速本地(临时)SSD卷,如果您正在调整响应性,则应确保索引存储在本地。
https://www.elastic.co/blog/performance-considerations-elasticsearch-indexing
我意识到这并没有直接说出CPU问题,但是你可以采取的任何措施来使单个查询更具响应性(包括过滤/等等)将提高你的吞吐量。