火眼金睛破局ES伪慢查询 | 京东物流技术团队
一、问题现象
服务现象
服务接口的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 转载请注明来源

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Chrome 测试限制跨站点跟踪功能,以逐步淘汰第三方 Cookie
谷歌 Chrome 浏览器正在测试 Tracking Protection,一项可限制跨站点跟踪的新功能。 这项新功能是谷歌"Privacy Sandbox"计划的一部分,该计划旨在以负责任的方式在 2024 年下半年逐步淘汰第三方 cookie,其中包括为网站创建新的工具来实现基本功能,并给予开发人员适应的时间。 Tracking Protection的引入将首先从一小部分 Chrome 用户开始,公告透露,他们将于 2024 年 1 月 4 日开始测试 Tracking Protection 功能,面向全球 1% 的 Chrome 浏览器用户推出。 近三十年来,第三方 cookie 一直是网络的基本组成部分。它们可用于跟踪网站活动,但网站同时也在使用它们来支持一系列在线体验,例如帮助用户登录或展示相关广告。 “通过 Privacy Sandbox,我们正在采取负责任的方式逐步淘汰 Chrome 中的第三方 Cookie。我们为网站构建了新工具,支持关键用例,并为开发人员提供了过渡时间。我们将从一小部分 Chrome 用户开始引入 Tracking Protection,以便开发者可...
- 下一篇
基于Raft算法的DLedger-Library分析 | 京东物流技术团队
1 背景 在分布式系统应用中,高可用、一致性是经常面临的问题,针对不同的应用场景,我们会选择不同的架构方式,比如master-slave、基于ZooKeeper选主。随着时间的推移,出现了基于Raft算法自动选主的方式,Raft是在Paxos的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多。 1)DLedger 是openMessaging发布的一个基于 Raft 实现的JAVA类库,可以方便引用到系统中,满足其高可用、高可靠、强一致的需求,其中在RocketMQ中作为消息Broker存储高可用实现的一种解决方案。 2)Raft将系统中的角色分为领导者(Leader)、跟从者(Follower)和候选人(Candidate): Leader:接受客户端请求,定时发送心跳包,并向Follower同步请求日志,当日志同步到大多数节点上后告诉Follower提交日志。 Follower:接受并持久化Leader同步的日志,在Leader告之日志可以提交之后,提交日志。 Candidate:Leader选举过程中的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作