Elasticsearch 一段时间后出现 SocketTimeoutException的问题

这篇具有很好参考价值的文章主要介绍了Elasticsearch 一段时间后出现 SocketTimeoutException的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java springboot 使用ES客户端连接

一段时间闲置后,首次调用es命令会报SocketTimeOutException问题,再次调用不会报错

问题出现原因:

Elasticsearch 客户端会根据服务器返回的HTTP报文内容,来决定客户端保持HTTP连接Keep-Alive状态的策略。
如果结果如下,那么保持HTTP连接 Keep-Alive状态为120s

Connection: Keep-Alive
Keep-Alive: max=5, timeout = 120

如果不包含上述内容,那么客户端将保持Keep-Alive状态的时间为永久。
事实上,Elasticsearch服务器返回的报文,并没有上述HTTP头内容,所以客户端所有的HTTP连接都为永久保持Keep-Alive。
如果客户端长时间没有发送请求,服务器或者防火墙已经close了HTTP底层的TCP链接,但是此时客户端并不知道,由于Keep Alive是无限期,那么并不会重新建立连接,而是直接发送请求,此时就会得到SocketTimeout异常。

个人解决方案:
定期发类似ping的操作 保活

配置方式1:

@Configuration
public class EsConf {

    @Autowired
    LocalProperties localProperties;

    @Bean
    RestHighLevelClient elasticsearchClient() {
        ClientConfiguration configuration = ClientConfiguration.builder()
                .connectedTo(" 210.72.13.245:9200")
                .withHttpClientConfigurer(httpClientBuilder -> {
                    // httpclient保活策略
                    httpClientBuilder.setKeepAliveStrategy(((response, context) -> Duration.ofMinutes(2).toMillis()));
                    return httpClientBuilder;
                })
                //.withConnectTimeout(Duration.ofSeconds(5))
                .withSocketTimeout(Duration.ofSeconds(600))
                //.useSsl()
                //.withDefaultHeaders(defaultHeaders)
                //.withBasicAuth(username, password)
                // ... other options
                .build();
        RestHighLevelClient client = RestClients.create(configuration).rest();
        return client;
    }
}

配置方式2:

 @Bean(destroyMethod = "close")
    public RestHighLevelClient client() {
        RestClientBuilder builder = RestClient.builder(new HttpHost(hostName, Integer.parseInt(port), scheme));
        builder.setHttpClientConfigCallback(httpClientBuilder -> {
            httpClientBuilder.setKeepAliveStrategy((response, context) -> Duration.ofMinutes(3).toMillis());
            httpClientBuilder.disableAuthCaching();
            return httpClientBuilder;
        });

        return new RestHighLevelClient(builder);
    }

参考文章:
https://www.dandelioncloud.cn/article/details/1578623608362856450文章来源地址https://www.toymoban.com/news/detail-700910.html

到了这里,关于Elasticsearch 一段时间后出现 SocketTimeoutException的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • elasticsearch-head 连接ES出现401问题解决

    写在前面:ES 和elasticsearch-head 安装在同一台机器,ES启用了X-pack,但是在elasticsearch-head 连接时提示401无权限访问,查了好久,找到了解决方案。 问题: 解决方法: 修改ES配置文件,elasticsearch.yml,添加如下一行内容: 然后重启Es服务,即可正常连接访问。

    2024年02月16日
    浏览(32)
  • 使用Docker安装和部署Elasticsearch出现问题以及解决方案

    docker安装elasticsearch(最详细版)| Bright1668-CSDN es在Windows环境启动报错 | 你道本部院是个书生-CSDN 查看max_map_count的值 默认是 65530 。 重新设置max_map_count的值。 –name es:设置容器的名称为\\\"es\\\"。 -p 9200:9200 -p 9300:9300:这部分将主机的端口与容器的端口进行映射。 -e “discovery.ty

    2024年02月09日
    浏览(41)
  • 解决Win11休眠一段时间后自动关机的问题

    S0 工作状态:系统完全可用。 S0 睡眠(现代待机):低功耗空闲,网络可用 。 S1 睡眠:CPU停止工作。 S2 睡眠:CPU关闭。 S3 睡眠:仅保留内存工作。 (S1-S3) + S4 混合睡眠:睡眠和休眠状态的组合。 S4 休眠:硬件全部关闭,内存映像转为休眠文件写入到硬盘。 S5 软关机:硬件

    2024年02月09日
    浏览(61)
  • 解决虚拟机VMware一段时间不动,就卡死的问题

    虚拟机总是一段时间不移动鼠标,就会无响应,每次都要重启两次才能继续维持一段时间,我一开始以为是内存和处理器或者硬盘太小的问题,但是我调大了之后还是一样,下面是我分配的虚拟机性能  针对虚拟机卡死,列出以下改善性能的方式,大家可以尝试一下: 因为虚

    2024年02月06日
    浏览(43)
  • 【深度学习高效小trick】使用Linux服务器一段时间后出现‘Socket error Event: 32 Error: 10053’,快速带你解决连接失败!

            使用【Xshell】软件的时候,我们通常会把程序挂在【Xshell】主页上,这样可以随时随地的看到深度学习代码训练的进程。但是,把自己的程序挂上一天,或者一段时间不操作【Xshell】,就会出现这个问题。然后,你再次连接还可以连接,就是你的程序得重新跑了。

    2024年01月21日
    浏览(33)
  • STM32使用HAL库,串口收发一段时间后出错问题及解决

    当STM32使用HAL库进行开发时,偶尔会遇到串口收发数据量大时,会出现问题。比如同时串口同时收发,一段时间后就只能发送,接收不工作。或是只接收,但数据量大时也不工作。下面对这些问题和其解决办法进行整理。 当数据量过大且传输频率快时,串口可能会因为溢出,

    2024年02月16日
    浏览(28)
  • kafka自动退出问题:开启kafka一段时间后,jps发现kafka自动退出。

    解决方法: 开启zk,来到zk路径下开启一个zk bin/zkServer.sh start . 查看zk的状态 bin/zkServer.sh status 发现zk并没有运行,这是正常现象,因为一台机器开启zk,没有达到集群的半数,不工作。 接着在第二台机器上开启zk 并查看zk状态 bin/zkServer.sh start bin/zkServer.sh status 如果zk状态出现

    2024年02月13日
    浏览(27)
  • Linux系统中 ssh 连接其他服务器一段时间后卡死问题

    在Ubuntu下经常需要通过SSH进行远程连接,使用过程中往往会遇到一个问题,就是命令行窗口在经过一段时间后就会卡死,无法输入命令。 在客户端上修改文件/etc/ssh/ssh_config,添加如下内容: 每隔20s向服务器发送一次心跳;若超过999次请求都没有发送成功,则主动断开与服务

    2024年02月16日
    浏览(29)
  • 分析Flink,源和算子并行度不一致时,运行一段时间后,看似不再继续消费的问题,提供解决思路。

    之前有分析过一次类似问题,最终结论是在keyby之后,其中有一个key数量特别庞大,导致对应的subtask压力过大,进而使得整个job不再继续运作。在这个问题解决之后,后续又再次出现了积压的情况,针对这个问题进行排查分析。 通过以下这张图,可以看到当前它是没有数据积

    2024年02月12日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包