elasticsearch CPU居高不下的问题排查

elasticsearch CPU居高不下的问题排查

问题发现

某天早上收到钉钉消息,ES集群CPU负载很高,赶快上控制台看了一下发现都飚到90多了,下面的图片是算的一段时间的平均值,所以显示CPU使用80左右,实际上很长一段时间都是90多了

问题排查

首先先看了一下查询写入的QPS,发现并没有特别高,接着看了一下那段时间的慢查询,因为是用的阿里云的ES服务,所以在控制台用下面的语句就能查询3s以上的慢查询了。查询后发现下面的has_child子文档查询很多,由此可以判断出应该是某个业务场景使用了大量的子文档查询。

vbnet 复制代码
search_time_ms: [3000.0 TO *]

问题解决

排查了一下业务代码,发现有一处使用多线程进行了子文档查询,查询的数据比较少的时候还能抗住,这也是当时测试能通过的原因。但是今天查询的数据量很大的时候就崩溃了,然后紧急修复了业务代码,去掉了多线程。

但是现在还有一个问题,怎么快速把ES的CPU降下去,减少对线上的影响? 了解得知,可以通过kill掉比较耗CPU的任务来实现,命令如下

查询对应的任务: actions=search是过滤出与索引搜索相关的任务

ini 复制代码
GET _tasks?detailed=true&actions=search

然后取消掉对应的任务就好了:

javascript 复制代码
POST _tasks/<task_id名>:<任务ID号>/_cancel

问题总结

个人认为,如果ES有相应的高性能计算节点,子文档查询可以使用,但是在集群性能不高的情况下,子文档查询还是尽量避免使用吧,因为这种子文档查询在大批量或者多线程的查询下很容易就会导致CPU飙升,这种的风险还是挺高的。除了子文档其实还有其他的解决方案,例如在数据层面进行处理,冗余相应的字段,也可以做到子文档的效果

相关推荐
吃饱了得干活5 小时前
用 PageHelper 同步数据到 ES:能跑,但这几个坑得先知道
后端·elasticsearch
吃饱了得干活5 小时前
从 LIKE 查询到毫秒级搜索:Elasticsearch 核心原理与 Java 实战
后端·elasticsearch
Flynt6 小时前
我把真实的 ES 查询怼到 7059 星的 Rust 搜索引擎上:1366/1369 的兼容承诺,裂了 3 个缝
elasticsearch·搜索引擎·rust
AscendKing12 小时前
Docker Compose 一键部署 SkyWalking 10.2.0 + Elasticsearch8.11,分布式链路追踪完整实战
elasticsearch·docker·skywalking·链路追踪·微服务监控
AOI小白新手上路13 小时前
autodl无卡模式下载NTURain 训练集实录:基于 Git 部分克隆与稀疏检出的数据拉取
大数据·git·elasticsearch
骑着蜗牛撵大象32715 小时前
Spring AI + Qwen3.8 周报助手:从事项采集到人工确认卡的闭环实战
人工智能·spring·elasticsearch·自动化·大模型应用·qwen3.8·rag溯源
Elastic 中国社区官方博客16 小时前
教程:监控 Java 应用
java·开发语言·数据库·elasticsearch·搜索引擎·全文检索
初願致夕霞17 小时前
Git 指南
大数据·git·elasticsearch
芷栀夏17 小时前
MonkeyCode本地部署后怎么远程用?从模型配置、VS Code到9999公网访问
大数据·elasticsearch·搜索引擎