Java Elasticsearch正在运行的线程太多
我们的ES集群有一个大问题。我们的一个节点始终使用99%的CPU。由于某些原因,与普通节点相比,它为Java Elasticsearch正在运行的线程太多,java,
elasticsearch,cpu,cpu-usage,Java,
elasticsearch,Cpu,Cpu Usage,我们的ES集群有一个大问题。我们的一个节点始终使用99%的CPU。由于某些原因,与普通节点相比,它为elasticsearch进程运行的线程大约是正常节点的3倍。我附上了两个节点的2个htop屏幕截图,一个过载,另一个正常。请告知 谢谢大家! 重载节点 正常节点 更新 群集体系结构: 11个节点,2个专用主机,9个数据节点 节点硬件属性 大师: CPU:8倍Intel(R)Xeon(R)CPU E5-1620 v2@3.70GHz 内存:32GB 磁盘:120GB 奴隶: CPU:12倍
elasticsearch
进程运行的线程大约是正常节点的3倍。我附上了两个节点的2个htop
屏幕截图,一个过载,另一个正常。请告知
谢谢大家!
重载节点
正常节点
更新
- CPU:8倍Intel(R)Xeon(R)CPU E5-1620 v2@3.70GHz
- 内存:32GB
- 磁盘:120GB
~250/s
,索引RT:~6K/s
Ubuntu 12.04.4 LTS
根据手头的稀疏信息,我有几个可能是问题的猜测:
- 碎片没有很好的平衡,你有热点。确保对使用最频繁的索引进行切分,使每台机器都能完成自己的工作。另外,查看索引级别“index.routing.allocation.total_shards_per_node”以尝试实现相等的平衡
- 也许在搜索端,您指定搜索应该始终转到“主”碎片。主指定不是平衡的东西,所以基本上,第一个节点有主碎片,后面出现的其他节点都是辅助节点
- 找到了答案
[2014-07-07 13:38:42521][DEBUG][index.search.slowlog.query][n013.my_cluster][my_index][3]take[2s],take[2066],types[my_type],stats[],search_type[query_THEN_FETCH],total_shard[5],source[{“size”:20,“from”:0,“sort”:“{”score”:“{”desc,“字段”:[“描述”、“标记”],“默认的_运算符”:“或”},”,“过滤器”:{“和”:[{“范围”:{“ats”:{“lte”:1404730800}}}},{“术语”:{“辅助”:[1,2,4]}},“_缓存”:false}},”,额外的源代码[]
问题存在于“过滤器”{“和”:…}
,对于ES来说,与bool
类型的查询相比,这类查询似乎更重。因此,无论何时,当您想要应用一些过滤器时,请使用bool
过滤器(必须
,不得
和应该
)
参考文献:
干杯!恐怕您的屏幕截图本身没有多大帮助。我要添加以下内容:群集中的节点数、每个节点的内存、cpu和磁盘、群集中的文档数、总体群集和索引配置、映射、查询卷、插入卷、ES诊断的输出,如节点统计、操作系统、,jvm版本。@JohnPetrone我发布了一个包含所需信息的更新。谢谢!谢谢你的回复。我们确实遇到了一个热点问题,即我们有9个数据节点,每个索引有10个碎片,因此始终有一个节点可以容纳2个碎片。出于测试目的,我们将次要主节点更改为数据节点e和migrated重新分配了碎片-遗憾的是没有更改。关于搜索请求,我们有默认配置,因此它正在查询副本。尝试将每个索引的“index.routing.allocation.total_shards_per_node”设置为1,这将强制实现10个数据节点和10个碎片(包括副本)的相等平衡每个索引。注意:这只应该用于测试。从长远来看,每个索引有更多的碎片可能会更好,这将给每个节点的总碎片提供一些灵活性。
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)