文章目录

  • 导读
  • 报错分析
    • 如何看懂异常日志呢?
    • 报错的猜想
    • 生产情况分析
    • 我个人认为合理的猜想
  • 429报错怎么产生的?
    • 查找资料
      • 百度
      • elastic中文社区
      • 书籍
      • github
  • 关键资料总结
    • bulk
    • 高IO (IO密集型)
    • 高CPU(CPU密集型)
    • es接收请求队列
    • es使用场景
  • 我个人分析429产生的原因
  • ES的优化
  • 最后聊两句

导读

  • 最近线上有个关键报错:
Wrapped by: java.io.IOException:
Request POST https://xxx/_search?search_type=xxx HTTP/1.1 yielded text/plain;charset=ISO-8859-1,
should be json: HTTP/1.1 429 Too Many Requests

报错分析

如何看懂异常日志呢?

  • 先知道异常日志的输出规则。
  • 异常名,细节信息,路径 的概念如下图。(参考:https://www.lmlphp.com/user/58062/article/item/671925/)
  • 异常名+细节信息以先进后出(FILO)的顺序打印,即:打印内容最下方的异常最早被抛出,逐渐导致上方异常被抛出。
  • 路径以先进先出(FIFO)的顺序打印,即:位于打印内容最上方的位置最早被该异常经过,逐层向外抛出。
  • tips:这也是为什么叫异常栈了,栈就是先进后出(FILO)

报错的猜想

  • 猜想一:调用es的search api,入参有问题,因为看到关于json的报错。
  • 猜想二:429 Too Many Requests 导致。

生产情况分析

  1. 偶发产生这个报错
  2. 产生这个报错的入参不固定
  3. 入参再次请求没有产生报错
  4. 报错时 CPU 和 内存 没有告警

我个人认为合理的猜想

  • 根据异常日志的输出规则,json异常是在最先输出,再结合生产情况的分析,我更倾向 429 是真实报错原因,json的异常是返回结果时,es返回的不是json串,所以json解析报错。

429报错怎么产生的?

查找资料

百度
  • 关键字:es 429
elastic中文社区
  • https://elasticsearch.cn/question/8753
  • https://elasticsearch.cn/question/2632
书籍
  • 书名:Elasticsearch 源码解析与优化实战
github
  • https://github.com/elastic/elasticsearch

关键资料总结

bulk

  • bulk:es 批量增删改操作(特殊情况:index/delete操作转变成了只包含一条文档的bulk请求)

高IO (IO密集型)

  • 频繁写入操作会导致高IO,占内存和磁盘,IO密集型建议使用脚本语言进行编码,比如python,相对编码简单,编码效率快。

高CPU(CPU密集型)

  • 频繁查询操作会导致高CPU,占CPU,CPU密集型建议使用编译型语言进行编码,比如C、C++、Java和C#

es接收请求队列

  • 每个节点都有一个线程池队列,可以容纳若干个请求,具体取决于您使用的 Elasticsearch 版本。队列已满时,将拒绝新请求。

es使用场景

  • “tagline” : “You Know, for Search”

我个人分析429产生的原因

  • 在查询的时候会触发429,降低并发查询频次,提高写入速度。

ES的优化

  • 参考文章:https://blog.csdn.net/wmj2004/article/details/80804411
  • elasticsearch.yml 中增加如下设置
indices.memory.index_buffer_size: 20%
indices.memory.min_index_buffer_size: 96mb# Search pool 设置 search 的线程数和队列数
thread_pool.search.size: 5
thread_pool.search.queue_size: 100
# 这个参数慎用!强制修改cpu核数,以突破写线程数限制
# processors: 16
# Bulk pool 设置 bulk 的线程数和队列数
#thread_pool.bulk.size: 16
thread_pool.bulk.queue_size: 300
# Index pool 设置  Index 的线程数和队列数
#thread_pool.index.size: 16
thread_pool.index.queue_size: 300
# 设置 filedata cache 大小
indices.fielddata.cache.size: 40%
# 设置节点之间的故障检测配置
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s
  • 索引优化配置
PUT /_template/elk
{"order": 6,"template": "logstash-*",    #这里配置模板匹配的Index名称"settings": {"number_of_replicas" : 0,    #副本数为0,需要查询性能高可以设置为1"number_of_shards" :   6,    #分片数为6, 副本为1时可以设置成5"refresh_interval": "30s","index.translog.durability": "async","index.translog.sync_interval": "30s"}
}

最后聊两句

  • 金发姑娘原则,对于项目的技术选型时,没有最好的技术,只有最适合的技术。
  • 里面有很多我个人的猜测和思考,可能有不正确的地方,希望各位大佬多多指教评论。

关于 Elasticsearch 429 Too Many Requests 的 排查思考相关推荐

  1. 429 too many requests错误出现在wordpress后台更新及官网的5种解决方法

    429 too many requests错误出现在wordpress后台更新及官网的5种解决方法 参考文章: (1)429 too many requests错误出现在wordpress后台更新及官 ...

  2. ERROR 429: Too Many Requests.

    wget https://cn.wordpress.org/wordpress-5.0.4-zh_CN.tar.gz 遇到问题 Resolving cn.wordpress.org (cn.wordp ...

  3. 【elasticsearch系列】双击elasticsearch.bat闪退,日志排查报错信息

    打开my-application.log日志文件,寻找报错信息,如下: [1] bootstrap checks failed [1]: the default discovery settings ...

  4. 【Elasticsearch】ES内存满问题排查思路

    1.概述 转载:https://bbs.huaweicloud.com/forum/thread-69710-1-1.html 2.问题排查思路 场景1 内存参数配置不合理. 场景2 查询返回的siz ...

  5. TCP重连重试机制——记一次线上故障排查思考

    一.引言 某天早晨,还没起床,就听到群里有人喊sentry报大量1001超时,反馈具体在A机器上,查看A机器的监控,php-fpm进程数被打满,后续请求必须等待,顺藤摸瓜最终发现是该机器的网关挂了,该 ...

  6. Elasticsearch集群扩容踩坑记录

    ES集群扩容构建踩坑总结 文章目录 ES集群扩容构建踩坑总结 @[toc] 需求 配置 参数说明 Data node's cluster uuid diffrent from master node' ...

  7. Elasticsearch 断路器报错了,怎么办?

    1.引言 本系列文章介绍如何修复 Elasticsearch 集群的常见错误和问题. 这是系列文章的第三篇,主要探讨:Elasticsearch 断路器报错了,怎么办? 第一篇: Elasticsea ...

  8. 爬虫代理 429 和 503

    429 Too Many Requests (太多请求) 如果使用代理报这个错误得话 那就是你该限制自己得请求了 服务器有限制,那么就有对应的策略.你的IP应该已经被判断出来了.类似反扒措施. 要么增 ...

  9. 记一次中台数据传输同步Elasticsearch失败的车祸现场

    目录 一.背景 二.题外话 三.开始排查 四.为什么索引处于只读状态呢? 五.如何解决 一.背景 前几天小哈在钉钉群里收到重庆业务线反馈,说是中台数据传输中间件在同步 Mysql 增量数据到 Elas ...

最新文章

  1. Thrift的服务器和客户端Python案例
  2. 数据结构与算法常用名词术语整理
  3. 没有统计学基础可以学python-机器学习和Python怎样快速掌握?你一定需要这27张清单...
  4. 自定义实现ProgressDialog样式的Dialog
  5. python token 访问控制_python 产生token及token验证
  6. 使用 NetDataContractSerializer 共享类型
  7. mysql5.7.14_mysql 5.7.14 下载安装配置方法图文教程
  8. java中构造函数有什么用,java中的构造函数有什么用?用它有什么好处?在什么地方用?...
  9. 干货|在美国不要读博的12条理由
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业审批管理系统
  11. Android Studio 3.4升级后的运行问题解决办法
  12. 【安卓笔记】—— 感知生命周期 Lifecycles
  13. javascript变量作用域一点总结
  14. d-s证据理论 matlab代码2
  15. 一个点击率10万+的恶搞程序送给大家!
  16. Nginx反向代理与负载均衡应用实践(二)
  17. Win10 一些常用快捷键
  18. 苹果发布AirPods 3,TWS真无线蓝牙耳机市场活力依旧
  19. pod init 报错 can‘t modify frozen String (FrozenError) [Xcodeproj] Unknown object version (56).
  20. HED边缘检测:Holistically-nested Edge Detection 解读

热门文章

  1. html表格垂直居中的CSS代码,使用3行CSS代码使任何元素垂直居中
  2. InvalidateRect和Invalidate的区别
  3. 一文读懂Q-Learning,DQN,DDPG的连接关系
  4. java抽象类中的变量修饰符_菜鸟整理的三个权限修饰符与接口、抽象类的总结...
  5. HTTP - get/post请求详解与本质区别总结
  6. 3D角色硬表面建模技巧与思路分享【案例解析】
  7. web.xml中security-constraint安全认证标签说明
  8. C++简单程序编写和操作步骤
  9. 『已解决』.NET报错:所生成项目的处理器框架“MSIL”与引用“wdapi_dotnet1021”的处理器架构“AMD64”不匹配
  10. 机器学习算法(决策树)-Lect03