悟空,拿我的打狗棒来

如何确认ES节点查询负载已经过高?

Elasticsearch | 作者 wangxinrong | 发布于2020年05月18日 | 阅读数:6475

我观察到的现象是这样:
查询的非高峰时间段,平均每核的cpu load,与cpu user time是基本保持一致的,例如cpu user time是25%时,平均每核cpu load是0.25
达到高峰时间段时,cpu load增长幅度就会明显高于cpu user time。当cpu user time到60-70%时,平均每核cpu load能到1或者2。这时看cpu idle time还好,仍然是30%-40%。节点是ssd盘,磁盘io负载很低。
 
关于这种情况我有两个疑问:
1.当监控上出现这种cpu load与cpu user time曲线走势不一致的情况时,是否说明节点已经到达了某种瓶颈?
2.既然cpu user time和cpu idle time在高峰期相加时仍然接近100%,那么这个升高的cpu load,究竟花费在处理什么事情上了呢?
已邀请:
匿名用户

匿名用户

赞同来自: juin

一般来说, cpu 使用率 和 load 负载了两个指标.
cpu 使用率高, load 负载不一定高. 反过来也一样.
 
出现load 负载飙升的原因
第一大量聚合查询,并且数据量也大,查询非常慢(这个问题,非常大,有时候,因为聚合查询太慢,导致线程假死,大量报错,内存激增,cpu 一直不恢复,cpu 100%,load 升高到极限,全都红了)
 
第二io频繁,比如瞬间删除了一个几十GB,几百GB的文件,一个或者多个,此时cpu load 会瞬间升高.(这个问题问题不大,可恢复),比如删除索引,索引合并,去掉副本,这种操作.
 
第三linux系统配置,各种问题导致(需要专业的linux服务器运维一起协助定位)
 
第四elastic集群不稳定,网卡流量满贯,导致集群响应慢
 
最致命的就是第一种.应该避免聚合操作.
 
建议: 如果业务需求需要聚合查询
 
cpu物理核心最少2颗,最好4颗.
cpu逻辑核心最少20核心,最好40核心,如果有钱,最好80核心
cpu线程数最少40,最好80,如果有钱,最好160
 
其他建议:
 
单数据节点,不要存储太多数据,1TB数据的分段内存大概占用是2GB内存,一台64GB内存的服务器,建议最大存储10TB机械硬盘
 
单数据节点,内存64GB即可,数据存储上线10TB(如果单数据节点存储20TB,内存必须128GB+,并且分配64GB给jvm堆内存)
 
单数据节点的网卡,能用万兆网卡最好,网卡的流量特别大,尤其是数据的迁移(冷热数据分离,跨机房节点,副本数据的复制)
 
单master节点,内存32gb,硬盘200gb,网卡万兆最好,cpu 4 核心8线程
 
es集群,数据节点数最好别超过30台,最佳20台,如果能十台就更好了,太少了也不行,master节点最少3台.
 
综上一台服务器的成本大概是2-5W左右,
 


cpu   Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz  10核心*2 20线程*2  
 
内存  Hynix海力士  32 GB DDR4 2400 MHz *2
 
硬盘  便宜,一块10TB的也就2000多块钱吧
 
网卡  Intel Corporation I350 Gigabit Network Connection *2
 
主板  曙光,浪潮,超微


 
以上的配置也就2W块钱,然后再进行扩展.
这是一台标配20核心40线程,64gb内存,12TB硬盘,双网卡的机架式服务器,2.5W一台.
http://detail.zol.com.cn/1316/1315794/param.shtml
 
不太理解现在的企业,为什么舍不得这点钱, es集群还用4核8gb内存的云服务器
 
 
 
以上所有言论,只是个人的理解,如果说错了,或者让你觉得不舒服,或者跟你的想法不一致,请不要人身攻击,谢谢.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

wangxinrong

赞同来自:

刚发现我问题里有个东西忘记说明了。这个是我在测试写入性能时观察到的,空服务器测试写入,无查询。
 
看监控,当cpu未跑满,集群状态正常时,cpu各项指标是这样:
监控项             avg  max
cpu load per core 0.45  0.60
avg cpu user time 44.4%  51%
avg cpu system time 2.73% 6.8%
avg cpu iowait time 0.76% 1.6%
avg cpu idle time 51.8% 60.6%
 
 
cpu跑满时,是这样:
监控项                    avg max
cpu load per core 1.17 1.27
cpu user time 76% 83%
cpu system time 8% 25%
cpu iowait time 1% 3.20%
cpu idle time 15% 20%
 
正常时cpuload与cpu user time基本是成比例变化,差不多到上限时,cpuload与cpu used不再成比例增长。这时system time占比开始变多。
 
这个system time主要是在处理什么呢
 

要回复问题请先登录注册