一、问题现象

服务现象

服务接口的TP99性能降低

ES现象

  • YGC:耗时极其不正常, 峰值200+次,耗时7s+
  • FULL GC:不正常,次数为1但是频繁,STW 5s
  • 慢查询:存在慢查询5+

二 解决过程

1、去除干扰因素

  • 从现象上看应用是由于某种原因导致JVM内存使用率不断增长,触发了频繁的YGC进而触发FGC(此时只是大胆的猜测)。
  • 此时ES的JVM配置是JVM内存40G,使用CMS垃圾回收器。40G的内存使用CMS垃圾回收器性能显然不如G1更合适
  • 找ES运维同学垃圾回收器由CMS修改为G1

(tips:不是所有的ES都适合G1,针对很多大查询的G1的Full GC会导致GC模式退化为串行扫描整个堆,导致几十秒甚至是分钟级别的暂停。这种长时间的暂停不仅影响用户的查询,还容易造成节点间的通信超时,导致master、dataNode脱离集群,影响集群稳定性。)

修改为G1后的GC变化:

  • YGC:耗时极正常, 峰值35+次,耗时800ms
  • FULL GC:正常,次数为0
  • 慢查询:存在慢查询10+

2、查找问题

ES的JVM垃圾回收器调整后,杰夫接口的服务接口的性能并没有因为GC问题的解决而解决。

  • 通过和ES侧同学的沟通了解到,这个ES集群的refresh极其异常,refresh:2w+。

  • ES监控中的慢查询语句单独去执行并不慢

原因:

应用中和ES的交互使用的是3.1.9.RELEASE 版本的spring-data-elasticsearch的包,ES数据同步工作是通过该API的中的save方法进行保存数据的,如下图所示,该版本的save操作每次save后都会进行refresh操作

<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.1.9.RELEASE</version>

为什么每次refresh会对查询产生影响呢,今天咱们也赶个时髦,让GPT给咱们回复下试试:

3、修复方案

  • 升级spring-data-elasticsearch 的版本到4.x以上,由于spring-data-elasticsearch高本版不兼容低版本改动成本较大,该项目中的所有涉及API操作的地方都需要改动

  • save操作改用operation进行操作(目前选择的该方案,改动较少)

慢查询已经消失

refresh的次数也降了下来

三、问题解决

最终的业务服务接口性能正常了。

教员常说我们总是被经验主意和投机主义左右我们的思想,破局这一问题的根本解决方式是只有实事求是,实践是真理的标准。

作者:京东物流 王义杰

来源:京东云开发者社区 自猿其说Tech 转载请注明来源

火眼金睛破局ES伪慢查询的更多相关文章

  1. 电影成生活O2O必争之地,破局之战就此拉开

    这一次的两会过后,互联网最流行的一个词恐怕当属“互联网+”.尤其是总理关于“以互联网为载体.把线上线下互动的新兴消费搞得红红火火”的一席话,更是让国内的O2O从业者兴奋不已.百度李彦宏在两会接受记者采 ...

  2. 【Elasticsearch】ES中时间查询报错:Caused by: ElasticsearchParseException[failed to parse date field [Sun Dec 31 16:00:00 UTC 2017] with format [yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis]];

    ES中时间查询报错:Caused by: ElasticsearchParseException[failed to parse date field [Sun Dec 31 16:00:00 UTC ...

  3. 破局人工智能:构建AI,与腾讯云一起探索语音应用场景

    本文来自腾讯云技术沙龙,本次沙龙主题为AI平台及智能语音应用解析 近年来,人工智能技术快速发展,与其他行业的结合也成为业界不断探索的方向.在人工智能基础和工具方面,AI平台已成为降低人工智能门槛的关键 ...

  4. 国产FPGA市场分析 该如何破局

    2018年上半年对于中国半导体行业而言是多事之秋,发生了几件让国人深入思考的大事.我作为IC产业的逃兵,最近也在思考很多的问题,包括资本市场.集成电路行业和研究所的一些不成熟的想法. 2008年进入华 ...

  5. es实战之查询大量数据

    背景 项目中已提供海量日志数据的多维实时查询,客户提出新需求:将数据导出. 将数据导出分两步: 查询大量数据 将数据生成文件并下载 本文主要探讨第一步,在es中查询大量数据或者说查询大数据集. es支 ...

  6. 破局AI落地难,数据标注行业需率先变革丨曼孚科技

    ​2019年,国内人工智能领域的投融资热情大幅降低,相当数量的AI企业彻底消失在了历史的长河中,“人工智能寒潮已至”甚至成为行业年度热词. 与前几年创业与投资热情齐头并进的盛况相比,近段时间的AI行业 ...

  7. 高倍币VAST,如何破局NGK算力市场?

    2020年,全球经济危机的爆发,无疑是给全球经济蒙上了一层阴影.而世界主要经济体也开启了无节制的放水,通过一轮又一轮的宽松货币政策,以刺激经济的发展.然而宽松的货币政策也加速了以美元为首的货币贬值,同 ...

  8. 敏捷史话(八):敏捷的破局之道——Martin Fowler

    在 Martin Fowler 的世界里,任何事情都有最优解. 1963年,Martin 出生于英格兰的沃尔索尔(Walsall),也在同样位于沃尔索尔的玛丽女王文法学校中接受中等教育.在这里的乡村中 ...

  9. 研发效率破局之道 Facebook工作法

    如果你问中国和美国互联网公司都有什么差别,很多人会回答:低效加班文化.最近爆出的996大讨论,通过糙快猛打拼和996加班去抢占市场获得机会的成功案例越来越少.至此,只有提高效能才是出路. 由于软件开发 ...

  10. 数据孤岛下的新破局 Real Time DaaS:面向 AP+TP 业务的数据平台架构

    从传统数仓,到大数据平台,再到数据中台和湖仓一体新数据平台,在日益加重的数据孤岛困扰下,面向AP场景的解决方案可谓浩如烟海.但实际上,企业在TP类型业务上的投入和AP的比率却高达9:1,为什么没有为T ...

随机推荐

  1. 设置启动WebSocket并配置程序池

    开启WebSocket服务 1.导航到"控制面板" > "程序" > "程序和功能" > "启用或禁用 Wind ...

  2. padans 常用的统计方法

    #coding=utf-8import pandas as pdimport numpy as npfile="./IMDB-Movie-Data.csv"data=pd.read ...

  3. 「Semigroup と Monoid と Functional と」

    一个被国内 oi 环境弱化至几乎不存在的概念,不过我觉得还是有学一学的必要.因为我没学过代数结构所以大部分内容都在开黄腔,欲喷从轻. Semigroup 的定义是,\(\forall a,b\in\m ...

  4. SpringBoot进阶 CommandLineRunner 初始化配置

    在Spring Boot中,CommandLineRunner接口用于在应用程序启动后执行一些特定的命令行操作.通过实现CommandLineRunner接口,您可以在Spring Boot应用程序运 ...

  5. 7. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP及TCP内网穿透原理及运行篇

    用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP及TCP内网穿透原理及运行篇 项目 ++wmproxy++ gite: https://gitee.com/tickbh/wmpr ...

  6. Regions 题解

    Regions 这里提供一种时间复杂度不那么优秀但十分好写也好理解的做法. 题目大意 给定一颗 \(n\) 个节点的树,每个节点拥有一个颜色,进行若干次询问,每次询问给出两种颜色 \(A,B\),求所 ...

  7. Full Tank 题解

    Full Tank 题目大意 给定一张 \(n\) 个点,\(m\) 条边的连通无向图,在每个点有一个加油站,油价为该点的点权,每条边的油耗为该边的边权.现给出若干询问,问一辆油箱容量为 \(c\) ...

  8. 给wordpress后台侧栏菜单添加自定义字段的方法

    我们在使用wordpress做网站的时候,难免有一些需要在后台设置侧栏菜单下添加自定义字段的情况.下面就简单说说一下,如何在后台设置侧栏菜单下添加自定义字段? 在这里我们主要是使用wordpress的 ...

  9. 16.2 ARP 主机探测技术

    ARP (Address Resolution Protocol,地址解析协议),是一种用于将 IP 地址转换为物理地址(MAC地址)的协议.它在 TCP/IP 协议栈中处于链路层,为了在局域网中能够 ...

  10. python3使用sqlite3构建本地持久化缓存

    环境:Windows 10_x64 python版本:3.9.2 sqlite3版本:3.34.0 日常python开发中会遇到数据持久化的问题,今天记录下如何使用sqlite3进行数据持久化,并提供 ...