Elasticsearch运行线程过多

时间:2014-07-04 12:48:52

标签: java elasticsearch cpu cpu-usage

我们的ES群集存在很大问题。我们的一个节点始终使用99%的CPU。出于某种原因,与普通节点相比,elasticsearch进程运行的线程数大约多3倍。我为2个节点附加了2个htop屏幕截图,其中一个节点已经过载,另一个正常。请指教!

谢谢!

重载节点 overloaded node

普通节点 normal node

更新

  1. 群集架构:

    11个节点,2个专用主站,9个数据节点。

  2. 节点硬件属性

    大师赛:

    • CPU:8x英特尔(R)Xeon(R)CPU E5-1620 v2 @ 3.70GHz
    • 内存:32GB
    • 磁盘:120GB

    奴隶:

    1. CPU:12x英特尔(R)Xeon(R)CPU E5-1650 v2 @ 3.50GHz
    2. 内存:64GB
    3. 磁盘:2.7T
  3. 群集中的文档:

    ~200百万

  4. 索引conf:

    每个索引分为10个分片(5个主分片,5个副本)

  5. 查询:

    搜索RT:~ 250/s,索引RT:~ 6K/s

  6. OS

    Ubuntu 12.04.4 LTS

  7. JAVA

  8. java version "1.7.0_60"
    Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
    Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
    

2 个答案:

答案 0 :(得分:2)

想出来。

[2014-07-07 13:38:42,521][DEBUG][index.search.slowlog.query] [n013.my_cluster] [my_index][3] took[2s], took_millis[2066], types[my_type], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"size":20,"from":0,"sort":{"_score":"desc"},"query":{"filtered":{"query":{"query_string":{"query":"my eight words space separated query","fields":["description","tags"],"default_operator":"OR"}},"filter":{"and":[{"range":{"ats":{"lte":1404730800}}},{"terms":{"aid":[1,2,4]}}]},"_cache":false}}}], extra_source[]

问题出现在"filter": {"and": ...}内,与bool类型查询相比,ES的这类查询看起来更重。因此,只要您想应用某些filters,请使用bool过滤器(mustmust_notshould

Reff:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html

干杯!

答案 1 :(得分:1)

基于手头的稀疏信息,我有几个可能是问题的猜测:

  • 碎片不均衡,你有热点。确保以最常用的索引进行分片,以便每台计算机都可以完成其工作。另外,查看索引级别" index.routing.allocation.total_shards_per_node"试图强制平衡。

  • 也许在搜索方面,您指定搜索应始终转到" primary"碎片。主要标识不是平衡的东西,所以基本上,第一个节点有主要分片,而其他后面出现的是所有辅助分片。