一、问题描述:

数据同步服务在写入Elasticsearch索引时,偶发异常。

二、异常信息:

java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-746 [ACTIVE]

三、可能原因:

客户端与用于 tcp 保持活动的弹性服务器内核配置之间的防火墙配置不匹配。

防火墙在 3600 秒后丢弃空闲连接。问题是 tcp keep alive 的内核参数设置为 7200 秒(RedHat 6.x/7.x 中的默认值):sysctl -n net.ipv4.tcp_keepalive_time 7200 因此,在发送保持活动探测之前断开连接。弹性 http 客户端中的 asyncHttpClient 似乎不能很好地处理断开的连接,它只是等到套接字超时。 因此,请检查您的客户端和服务器之间是否有任何网络设备(负载均衡器、防火墙、代理等)存在会话超时或类似情况,并增加该超时或降低 tcp_keep_alive 内核参数。

四、解决方案:

1.新增配置,设置连接超时时间。

# 链接超时时间,单位:毫秒
spring.elasticsearch.rest.connection-timeout=30000
# 读超时时间,单位:毫秒
spring.elasticsearch.rest.read-timeout=30000

2.增加客户端启动脚本中分配的内存。

#!/bin//bash

source /etc/profile

#ps -ef |grep spring.profiles.active|grep -v grep |awk '{print $2}'|xargs kill -9

cd /opt/app/resource_sync

nohup java -Xms512m -Xms512m -jar car-sync-1.0.0-SNAPSHOT.jar --server.port=8839 --spring.profiles.active=prod >> /opt/app/resource_sync/logs/car-sync/car-sync.log &

3.设置不自动刷新落盘

// 设置更新完成后不刷新索引 减少磁盘消耗 但实时性降低
updateByQueryRequest.setRefresh(false);

4.设置keep alive策略 (选1不选4)

package com.resource.sync.config;import org.apache.http.HttpResponse;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.protocol.HttpContext;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer;
import org.springframework.context.annotation.Configuration;import java.util.concurrent.TimeUnit;/*** @description:* @author: XinTong.Wang* @create: 2022-07-22 17:02**/
@Configuration
public class MyRestClientBuilderCustomizer implements RestClientBuilderCustomizer {@Overridepublic void customize(RestClientBuilder builder) {// keep alive策略builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setKeepAliveStrategy(CustomConnectionKeepAliveStrategy.INSTANCE));}public static class CustomConnectionKeepAliveStrategy extends DefaultConnectionKeepAliveStrategy {public static final CustomConnectionKeepAliveStrategy INSTANCE = new CustomConnectionKeepAliveStrategy();private CustomConnectionKeepAliveStrategy() {super();}/*** 最大keep alive的时间(分钟)* 这里默认为10分钟,可以根据实际情况设置。可以观察客户端机器状态为TIME_WAIT的TCP连接数,如果太多,可以增大此值。*/private final long MAX_KEEP_ALIVE_MINUTES = 10;@Overridepublic long getKeepAliveDuration(HttpResponse response, HttpContext context) {long keepAliveDuration = super.getKeepAliveDuration(response, context);// <0 为无限期keepalive// 将无限期替换成一个默认的时间if (keepAliveDuration < 0) {return TimeUnit.MINUTES.toMillis(MAX_KEEP_ALIVE_MINUTES);}return keepAliveDuration;}}}

Elasticsearch深入理解(十二)——SocketTimeoutException解决方案相关推荐

  1. 《深入理解 Spring Cloud 与微服务构建》第十二章 服务注册和发现 Consul

    <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发现 Consul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发 ...

  2. Scratch3.0——助力新进程序员理解程序(十二、画笔)

    Scratch3.0--助力新进程序员理解程序(十二.画笔) 目录 Scratch3.0--助力新进程序员理解程序(十二.画笔) 前言 环境 下载地址 安装说明 1.菜单栏 2.功能栏 3.代码区 4 ...

  3. 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<上>

    这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...

  4. Web基础配置篇(十二): Elasticsearch的安装配置及入门使用

    Web基础配置篇(十二): Elasticsearch的安装配置及入门使用 一.概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RE ...

  5. 趣谈网络协议笔记-二(第十二讲)

    趣谈网络协议笔记-二(第十二讲) TCP协议(下):西行必定多妖孽,恒心智慧消磨难 前言 哈哈哈,越当我看刘超的通俗讲解,我就越感觉自己的无能.每次当我看了讲解之后,每次当我感觉到这个东西原来是这么简 ...

  6. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  7. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  8. (原创)无废话C#设计模式之二十二:总结(针对GOF23)

    无废话C#设计模式之二十二:总结(针对GOF23) 比较 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 ...

  9. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

最新文章

  1. 彻底搞懂JVM类加载器:基本概念
  2. 0xBenchmark中垃圾回收测试模块的分析及改进
  3. redis的安全性及客户端工具的使用
  4. ITK:切割网格CutMesh
  5. 在路上(on the road)
  6. 通过 pxe(网络安装)完成centos 系统的网络安装
  7. 想要学习设计模式,你得先会看类图,一张图读懂UML
  8. 自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理
  9. matlab2c使用c++实现matlab函数系列教程-polyder函数
  10. js 加载html文件内容,js读取txt文件内容
  11. 图像傅里叶变换的MATLAB实现
  12. 加速器在模拟器中的尝试
  13. 【gcc】warning信息梳理
  14. 【强推】8个实用的Python程序
  15. 计算机大一新生打字速度,打字速度比赛策划书5篇.doc
  16. 获取U盘 VID,PID
  17. 中国古代30大名将VS100名将排行(按时间顺序)
  18. 耶利哥打不开因计算机丢失,我的电脑游戏打不开说什么应用程序错误。是不是中毒了...
  19. 职业推手自曝微博炒作内幕 十万水军任你调遣!
  20. 解决微信H5端用户注册登录

热门文章

  1. 我愿为这二极管奉献我的一生
  2. 朴素贝叶斯分类的原理与流程——转张洋
  3. 学成在线--媒资管理模块
  4. 如何在不清空原有配置的情况下恢复路由器密码?巨强!
  5. 所有的快捷方式打不开怎么办?
  6. 机器学习#假设空间与版本空间
  7. Android Studio 安装、环境配置全家桶
  8. 【研究院】一年了,再看看江湖中的达摩院
  9. java毕业设计甘蔗交易平台mybatis+源码+调试部署+系统+数据库+lw
  10. java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署