ES两个小时没连接竟然会出现bug,为此老板给我夹了个鸡腿。。。

这篇具有很好参考价值的文章主要介绍了ES两个小时没连接竟然会出现bug,为此老板给我夹了个鸡腿。。。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前段时间上线了个项目,测试每天早上来摸鱼之前会点一点,发现第一次点会报错,然后一天都没问题,刚开始没在意,后来每天上班来摸鱼前点第一次都会出错,发现真的摸到鱼了,然后就给我提了个bug,说明天早上第一次留给你,你复现一下看看,然后就有了这篇文章了。

问题现象

ES隔一段时间不操作后,再请求es就会报错Connection reset by peer,之后连续几次操作都正常,而且还是必现的,报错信息如下:

 

css

复制代码

org.springframework.dao.DataAccessResourceFailureException: Connection reset by peer; nested exception is java.lang.RuntimeException: Connection reset by peer at org.springframework.data.elasticsearch.core.ElasticsearchExceptionTranslator.translateExceptionIfPossible(ElasticsearchExceptionTranslator.java:76) at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.translateException(ElasticsearchRestTemplate.java:378) ...... Caused by: java.io.IOException: Connection reset by peer at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:828) at org.elasticsearch.client.RestClient.performRequest(RestClient.java:248) at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235) at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514) ...... Caused by: java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ......

问题定位

Caused by: Connection reset by peer根据日志可以知道,socket 连接被中断,连接中断的原因有很多,比如:

  • 服务端或者客户端异常。
  • 客户端连接超时中断。

查看日志,这段时间内也没啥异常信息,服务端也没异常重启,也没出现流量陡量的情况。想到之前在mysql遇到过的问题,mysql的连接如果超过8个小时(默认的时间)不连接,服务端为了节约资源,会主动把长时间没连接的客户端给中断掉,按照这个思路去排查问题,果然发现原因如出一辙。导致这个问题的原因有两个:

  1. 客户端采用长连接的方式连接服务端。
  2. 长时间不连ES,服务端会关闭连接。
1. 客户端采用长连接的方式连接服务端, 一直持有连接。

ES High Level Rest Client客户端和服务端的连接采用的是长连接,查阅源码发现客户端创建了client连接池,每个client持有一个http连接,并且开启http的keep-alive策略复用连接, 策略默认是 -1 ,也就是不过期。

ES两个小时没连接竟然会出现bug,为此老板给我夹了个鸡腿。。。,elasticsearch,bug

2. 长时间不连ES,服务端会关闭连接。

服务器会有TCP的Keepalive 经过一段时间如果没有操作就会自动断开连接功能,而ES默认就是取服务器的时长配置linux查看超时时间默认为两小时:

 

csharp

复制代码

# 查看超时时间(单位秒) [root@VM ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time 7200

也就是说如果客户端超过两个小时没有连接服务端,服务端会清除掉连接。

解决方法

修改客户端的keepalive时间,以单机的ES为例,代码如下:

 

ini

复制代码

@Override public RestHighLevelClient elasticsearchClient() {    List<HttpHost> httpHostsList = new ArrayList<>();    httpHostsList.add(new HttpHost(uris, Integer.parseInt(port)));    HttpHost[] httpHostsArray = new HttpHost[httpHostsList.size()];    httpHostsArray = httpHostsList.toArray(httpHostsArray);    RestClientBuilder builder = RestClient.builder(httpHostsArray);    builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setKeepAliveStrategy((httpResponse, httpContext) -> 1000 * 60));    return new RestHighLevelClient(builder); }

application.yaml

 

yaml

复制代码

spring: elasticsearch:   rest:     uris: ip     port: port

以上代码是基于单机版的es配置的,如果你们的是集群请自行百度设置,重点代码是设置setKeepAliveStrategy 这个方法里面。

经过这个设置后,线上就没有出现过类似的问题了。

最后

其实这个问题不仅仅是ES会有的,mysql, CK, 还有其他同类的C/S架构的都会存在这样的问题,这是一类问题,由于服务端资源优化,会回收一些连接,就会导致这个问题,知道这个问题后,我们可以举一反三,遇到同样的问题可以快速定位,希望这个问题能对大家有用,最后感谢大家看到这里。。。

作者:TodoCoder
链接:https://juejin.cn/post/7113706089350168606
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章来源地址https://www.toymoban.com/news/detail-780292.html

到了这里,关于ES两个小时没连接竟然会出现bug,为此老板给我夹了个鸡腿。。。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java【算法 05】通过时间获取8位验证码(每两个小时生成一个)源码分享

    要求是很简单的,每个验证码的有效时间是 2小时 ,这个并不是收到验证码开始计时的,而是每个两小时的时间段使用的是相同的验证码。 将 2个小时处理为相同的值 : 很简单的算法分享。优点: 不需要将生成的验证码缓存。 时间入参,能够重复获取相同的值。

    2024年02月05日
    浏览(10)
  • 数据存入es 时间差了8个小时

    数据存入es 时间差了8个小时

     Mysql  这种现象其实是正常的,因为es默认存储时间的格式是UTC时间,我们一般用的是UTC+8 存入Es后应该是在原来的基础上(UTC+8)-8=UTC 存入到Es后就变成我们看到的样子了 首先知道几个时间名词: (1)GMT:格林威治标准时间 (2)UTC:世界协调时间 (3)DST:夏日节约时间 (

    2024年02月02日
    浏览(11)
  • Java 21中的两个值得关注的Bug修复

    在Java 21中,除了推出很多新特性之外,一些Bug修复,也需要注意一下。因为这些改变可能在升级的时候,造成影响。 比如:对于 Double.String(1e23) : 在Java 19后,输出内容为: 1.0E23 在Java 18中,输出内容为: 9.999999999999999E22 欢迎关注,持续更新的Java新特性专栏 IdentityHashMap 是

    2024年02月05日
    浏览(8)
  • 请领取你的免费云电脑:微软Windows实验虚拟机,每天可以免费使用两个小时,上Google搜资料很方便

    请领取你的免费云电脑:微软Windows实验虚拟机,每天可以免费使用两个小时,上Google搜资料很方便

    对于没有国外VPS的我,又需要上Google查学习资料的我来说,简直是天上掉馅饼,不用白不用,下面简单描述说明一下免费申请使用微软(Microsoft)学习实验虚拟机的流程,   微软在在财务和运营应用中实施常见集成功能,提供了办公软件集成教学的虚拟机,我们可以利用此Wi

    2024年02月05日
    浏览(13)
  • SpringBoot解决mysql 连接8小时问题

    问题: 服务连接mysql数据库,8小时没有数据库的操作时候,数据库会主动断开连接释放资源 解决办法总共 4种方法 如果你有权限访问 MySQL 服务器的配置,你也可以调整 MySQL 的连接超时时间。修改 wait_timeout 和 interactive_timeout 参数,将它们设置为一个更大的值,以延长连接的

    2024年02月12日
    浏览(11)
  • bug--两个表格,数据来自于同一个抽屉表格,现在让两个表格的数据 不能一样--处理checked 和 disabled

    bug--两个表格,数据来自于同一个抽屉表格,现在让两个表格的数据 不能一样--处理checked 和 disabled

      1、在 A表、B表 数据展示的组件里(根源),给新增触发的事件里,添加不同的type值,来区分是A表 还是B表 2、要把区分的 type 传给 addProSetRelation这个事件(找到哪里),把type传给 使用这个事件的方法(这里是因为 他是根据这个方法 把事件一级一级传下去的) 3、找到

    2024年02月12日
    浏览(11)
  • php array_diff 比较两个数组bug避坑 深入了解

    php array_diff 比较两个数组bug避坑 深入了解

    今天实用array_diff出现的异常问题,预想的结果应该是返回 \\\"integral_initiate\\\"=\\\"0\\\",实际没有 先看测试代码: 没有返回差异,纠结了好一阵子又查阅了文档看到这一句话才醒悟  我们简化一下数组来看,通过简化数组发现只要两个数组中间都带有0的值就不会正常效验 解决方案就

    2024年01月20日
    浏览(14)
  • 重大问题,Windows11出现重大BUG

    重大问题,Windows11出现重大BUG

    重大问题,Windows11出现重大BUG 这种Windows11操作系统出现BUG已经可以说是非常常见的,但是,今天我将代表所有微软用户,解决一个关于UI设计非常不舒服的功能 最近,我在用Edge浏览器看视频的时候,突然想打开截图工具,我知道,截图工具可以在开始菜单中打开,于是我打

    2024年02月02日
    浏览(13)
  • 记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题

    记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题

    1、找不到数据库:Unknown database ‘***’ 若还没有创建数据库,该迁移工具不会自动创建。你可以使用SQL命令手动创建一个数据库: 2、迁移后没有效果:No changes in schema detected. 我的情况长话短说,就是创建的数据模型类没有注册到程序实例 app ,解决方案是使用工厂函数。细

    2024年02月11日
    浏览(9)
  • el-table魔改样式出现BUG,表格内容区域出现滚动条

    el-table魔改样式出现BUG,表格内容区域出现滚动条

    代码排查后发现时我设置了 fixed:“xxx” 属性就会导致滚动条出现的问题,不设置则无。 设置 fixed:“xxx” 后elementui就会多渲染几个css。重点看bottom:-1px,这是官方设置的值。我发现重置为bottom:-0px,问题就能解决了,下面直接贴解决代码。 把样式放在全局CSS中 还有更好的方

    2024年02月02日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包