Elasticsearch容器化后pod出现throttle的情况

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Elasticsearch容器化后,节点所在pod偶发CPU throttle的情况。

现象

ES节点的pod跑了一段时间就偶尔会出现一次cpu throttle。

进而触发写入、查询队列的堆积,然后出现一些请求reject的情况。

image.png

图中可以看出来throttle的时间是25s,由于采集是1min一次,即1min内累计了 25s 的时间是被throttle的。



CPU限流(throttle)

k8s使用CFS(Completely Fair Scheduler,完全公平调度)限制负载的CPU使用率:

  • CPU使用量的计量周期为100ms,100ms作为一个时间片;
  • CPU limit决定每计量周期(100ms)内容器可以使用的CPU时间的上限;例如分配了1cpu,即当前周期(100ms)内,线程总共允许消耗100ms;以此类推,0.2 CPU = 20ms CPU时间每计量周期,2.5 CPU = 250ms CPU时间每计量周期;
  • 24 CPU = 2400ms CPU时间每计量周期,当前周期(100ms)允许2400ms的CPU时间被消耗。
  • 如果程序用了多个核,CPU时间会累加统计。(上面描述的 2400ms,指所有线程在周期内可消耗的累积值,重叠/并行的部分都需要叠加计算)
  • 本周期内若容器的CPU时间用量达到上限,CPU限流开始,容器只能在下个周期继续执行;


分析

1.监控图粒度较大,1min采集1次,累计throttle时间25s,如果并发请求在100ms(周期)的开始就拿到了大量的时间,那后续时间就只能被阻塞。

2.并行(非并发)的请求如果占满了核心数,其余线程只能等待,一般不会出现,一般API主要是IO密集型。在一个周期内如果时间被消耗完,那所有线程都要阻塞,等到下一个周期开始执行。

3.容器环境io相互影响导致的wait,可能导致cpu消耗的情况

4.ES是个java程序,会有jit、gc,这两个都十分消耗CPU


结论

1.ES大部分请求还是IO密集型,磁盘推荐使用SSD。

2.核心应用尽量不做超分。

3.核心应用给足够的内存,防止频繁GC、频繁缺页中断。

4.throttle的问题几乎无法彻底解决,只能尽可能调优。根据业务请求的并发来调整cpu limit(或request)

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
21天前
|
Kubernetes 应用服务中间件 nginx
CKA考试必备:解锁Pod封装多容器的高级技巧!
CKA考试必备:解锁Pod封装多容器的高级技巧!
36 0
|
21天前
|
Prometheus Kubernetes 监控
容器服务ACK常见问题之pod设置securityContext调整参数失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
21天前
|
Kubernetes 安全 Cloud Native
云原生|kubernetes|pod或容器的安全上下文配置解析
云原生|kubernetes|pod或容器的安全上下文配置解析
139 0
|
9月前
|
Kubernetes 固态存储 调度
Kubernetes(k8s)容器编排Pod调度策略
Kubernetes(k8s)容器编排Pod调度策略
114 0
|
7月前
|
Kubernetes API Docker
k8s教程(pod篇)-容器获取pod信息(Downward API)
k8s教程(pod篇)-容器获取pod信息(Downward API)
386 0
|
14天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十六)——Pod容器探测
Kubernetes详解(十六)——Pod容器探测
44 1
|
15天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十六)——Pod容器探测
Kubernetes详解(十六)——Pod容器探测
26 0
|
4天前
|
存储 Kubernetes Linux
pod介绍之 容器分类与重启策略
pod介绍之 容器分类与重启策略
|
21天前
|
存储 Kubernetes Docker
容器服务Kubernetes版产品使用合集之集群节点和 pod 实现自动扩缩容如何解决
容器服务Kubernetes版,作为阿里云提供的核心服务之一,旨在帮助企业及开发者高效管理和运行Kubernetes集群,实现应用的容器化与微服务化。以下是关于使用这些服务的一些建议和合集,涵盖基本操作、最佳实践、以及一些高级功能的使用方法。
|
21天前
|
Kubernetes API 数据库
容器服务 Pod 处于 CrashLoopBackOff的原因及解决方法
"CrashLoopBackOff" 是 Kubernetes 中 Pod 进入的一种错误状态,通常是由于容器不断崩溃(失败)而触发的重启策略所导致的。以下是 Pod 处于 CrashLoopBackOff 状态的原因及相应的解决方法: ### 原因: 1. **应用错误:** - 容器内部的应用程序崩溃,导致容器退出。 - 应用程序可能因为异常、未捕获的错误、配置问题、依赖缺失等原因导致崩溃。 2. **错误的启动命令:** - Pod 的启动命令或入口点设置错误,导致容器无法正确启动。 3. **资源限制:** - Pod 可能受到内存或 CPU 资源限制,
139 0