Elasticsearch深入理解(十二)——SocketTimeoutException解决方案
一、问题描述:
数据同步服务在写入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解决方案相关推荐
- 《深入理解 Spring Cloud 与微服务构建》第十二章 服务注册和发现 Consul
<深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发现 Consul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发 ...
- Scratch3.0——助力新进程序员理解程序(十二、画笔)
Scratch3.0--助力新进程序员理解程序(十二.画笔) 目录 Scratch3.0--助力新进程序员理解程序(十二.画笔) 前言 环境 下载地址 安装说明 1.菜单栏 2.功能栏 3.代码区 4 ...
- 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<上>
这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...
- Web基础配置篇(十二): Elasticsearch的安装配置及入门使用
Web基础配置篇(十二): Elasticsearch的安装配置及入门使用 一.概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RE ...
- 趣谈网络协议笔记-二(第十二讲)
趣谈网络协议笔记-二(第十二讲) TCP协议(下):西行必定多妖孽,恒心智慧消磨难 前言 哈哈哈,越当我看刘超的通俗讲解,我就越感觉自己的无能.每次当我看了讲解之后,每次当我感觉到这个东西原来是这么简 ...
- OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己
OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...
- SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- (原创)无废话C#设计模式之二十二:总结(针对GOF23)
无废话C#设计模式之二十二:总结(针对GOF23) 比较 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 ...
- 吴恩达《机器学习》学习笔记十二——机器学习系统
吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...
最新文章
- 彻底搞懂JVM类加载器:基本概念
- 0xBenchmark中垃圾回收测试模块的分析及改进
- redis的安全性及客户端工具的使用
- ITK:切割网格CutMesh
- 在路上(on the road)
- 通过 pxe(网络安装)完成centos 系统的网络安装
- 想要学习设计模式,你得先会看类图,一张图读懂UML
- 自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理
- matlab2c使用c++实现matlab函数系列教程-polyder函数
- js 加载html文件内容,js读取txt文件内容
- 图像傅里叶变换的MATLAB实现
- 加速器在模拟器中的尝试
- 【gcc】warning信息梳理
- 【强推】8个实用的Python程序
- 计算机大一新生打字速度,打字速度比赛策划书5篇.doc
- 获取U盘 VID,PID
- 中国古代30大名将VS100名将排行(按时间顺序)
- 耶利哥打不开因计算机丢失,我的电脑游戏打不开说什么应用程序错误。是不是中毒了...
- 职业推手自曝微博炒作内幕 十万水军任你调遣!
- 解决微信H5端用户注册登录