首页 > 其他分享 >火眼金睛破局ES伪慢查询

火眼金睛破局ES伪慢查询

时间:2023-12-15 09:56:17浏览次数:29  
标签:ES G1 refresh 查询 GC 伪慢 data 破局

一、问题现象

服务现象

服务接口的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,G1,refresh,查询,GC,伪慢,data,破局
From: https://www.cnblogs.com/Jcloud/p/17902712.html

相关文章

  • Restful
    RESTful(RepresentationalStateTransfer)是一种用于构建网络服务的架构风格。它是由RoyFielding在他的博士论文中提出的,名为《ArchitecturalStylesandtheDesignofNetwork-basedSoftwareArchitectures》。RESTful设计风格的目标是提供一种简洁、可伸缩、可维护的方式......
  • kubernetes_k8s应用
    开发-测试-运维1.传统的IT系统结构:开发-测试-运维运维难度和运维成本服务扩容:涉及资源分配-实例部署-启动环节 服务升级: 服务监控 服务治理:故障处理模块开发2.从单机走向集群系统的可伸缩性(scalability 横向扩容-水平可伸缩性(Horizontalscalability)就是......
  • C++(resize())
    在C++中,resize()是一种用于调整容器大小的成员函数,它通常用于std::vector、std::string等标准库容器。这个函数允许你改变容器中元素的数量,可以增加或减少容器的大小。对于std::vector:#include<vector>#include<iostream>intmain(){std::vector<int>myVector......
  • Centos 报错:The SSL connection could not be established, see inner exception 解决
    yumupdateyuminstallwgettarmakegccperlpcre-develzlib-develwgethttps://www.openssl.org/source/openssl-1.1.1l.tar.gztarzxvfopenssl-1.1.1l.tar.gzcdopenssl-1.1.1l./config--prefix=/usr--openssldir=/etc/ssl--libdir=libno-sharedzlib-dynamic......
  • SixLabors.ImageSharp 圆角矩形路径代码
    原因因微软抛弃了System.Drawing.Common决定重写绘图底层,在学习绘制时常会用到部分绘图引擎,参考过几个都有缺陷例如:1.SkiaSharp字体布局问题参考布局问题2.opencvsharp不支持中文文字于是乎我就用到了imageSharp,其中看到作者有对于圆角矩形头像的示例代码,但这......
  • 关于找不到指定的模块,异常来自HRESULT:0x8007007E的解决方法
    原文链接:https://www.cnblogs.com/ReBack2010/p/3713851.html上午从公司前辈那里拷贝到的ASP.NET代码,在自己机器上部署的时候发现问题,直接报错,找不到指定的模块,异常来自HRESULT:0x8007007E。并且一大堆警告。在网上百度很多解决方法,归纳如下:1、缺少DLL文件,我用depends打开我的B......
  • Postman/apifox pre-request script
    Postman/apifoxpre-requestscriptconstUUID=require('uuid');//HelperfunctiontogeneratethesignaturefunctionmakeSign(md5Key,params){constpreStr=buildSignString(params);consttext=preStr+md5Key;console.log("signS......
  • PostgreSQL创建只读用户
    1、创建一个用户名为<readonlyuser>,密码为<your_password>的用户CREATEUSER<readonlyuser>WITHENCRYPTEDPASSWORD'<your_password>';2、修改用户只读事务属性ALTERUSER<readonlyuser>SETdefault_transaction_read_only=on;3、设置USAGE权限给到<......
  • kubernetes_k8s框架概念梳理
    k8sk8s分为控制面(ControlPlane,master)和数据面(即Node)。控制面是K8S的大脑,组件包含:etcd数据库,负责注册服务、保存k8s配置和所有的API对象等数据scheduler负责监视pod的调度情况controller-manager负责节点、任务、端点和账户的总体调度a......
  • Codeforces Round 787 (Div. 3)D. Vertical Paths
    题目链接题意:给定一棵树,将这棵树划分成几天互不相交的链,要求最小化链的数量思路:每个叶子节点一定在一条链中,所以链的数量就是叶子节点的数量,从叶子节点往上跳直到根节点,边跳边标记,路径上所有点都属于这条链。坑:数据大时,不要轻易使用memset不然会t到起飞vector不要开太多就比......