环境:

        centos 7

        es 7.13.1

        jdk1.8

        es客户端 :elasticsearch-rest-high-level-client 7.13.1

        springboot 2.0.5

出现问题:

        springboot 集成elasticsearch-rest-high-level-client 后,当服务无请求一段时间,接口查询会出现超时问题,即使是根据id查询es也是一样。有时会恢复,有时会一直超时。重启java服务后会好一段时间。

排查问题:

        在es服务端未抓到请求。但是在java服务端可以抓到请求包,但是都是请求失败的。查看java服务端有很多长连接未关闭。

解决方式:

restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> {


			//显式启用 TCP keepalive
			httpClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom()
					.setSoKeepAlive(true)
					.build());

			/**
			 * 其他设置请添加
			 */

			return httpClientBuilder;
		});

并且调整java服务端linux的sysctl.conf里keepalive时间:

//原来默认的7200调整为 300
net.ipv4.tcp_keepalive_time = 300

经过测试,linux的keepalive时间不调整也没不会出现。

参考文章:

https://github.com/elastic/elasticsearch/issues/65213

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐