一、问题现象

服务现象

服务接口的 TP99 性能降低

ES 现象

二 解决过程

1、去除干扰因素

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

修改为 G1 后的 GC 变化:

2、查找问题

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

原因:

应用中和 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、修复方案

慢查询已经消失

refresh 的次数也降了下来

三、问题解决

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

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

作者:京东物流 王义杰

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


↙↙↙阅读原文可查看相关链接,并与作者交流