EDAS 轻量配置中心,应用注册上却无法调用服务提供者

问题背景:

某服务突然无法调用注册在轻量配置中心的服务提供者,但登录轻量配置中心控制台是可以搜索到对应的服务,且服务提供者的 IP、端口均正确。

查看轻量配置中心日志

查看config-center.log:
2018-10-09 10:01:33.479 [com.taobao.remoting.TimerThread] [ERROR] [com.alibaba.configcenter.registry.service.push.PushExecuteTask] - [push-error] 30005ms, reason=响应超时[30005]ms., GroupId[com.xxx.busi.shop.service.BusiShopService:1.0.0, sunlinqiang, non-persist], Revision=1, DataSize=0, Connection=ip:port

配置中心日志显示响应超时

查看客户端日志

1. /home/admin/logs/diamond-client/diamond-client.log
01 2018-10-09 16:26:01.028 ERROR [com.taobao.diamond.client.Worker.longPullingdefault:c.t.d.c.i.DiamondEnv] [] [] [500] longPulling error
01 2018-10-09 16:26:01.293 ERROR [com.taobao.diamond.client.Worker.longPullingdefault:c.t.d.c.i.DiamondEnv] [] [] [500] longPulling error
客户端显示拉取失败
2. /home/admin/taobao-tomcat-production-xxxx/logs/catalina.out
日志不输出

3 /home/admin/logs/hsf/hsf.log
01 2018-10-09 10:24:44.083 ERROR [HSF-Framework-AddressRefresh-4-thread-1:t.hsf] [99b83a99-9061-44a5-97ed-f1c92c8e0be9] [] [HSF-0066] consumer service [com.xxx.xx.atomic.xxerinfo.service.xxxrderInfoService:1.0.0] received empty address list! pls. double check if its associated implementation [MTConfigServerRegistry] exist or not
hsf服务获取不到地址列表,也就是与轻量配置中心的交互有问题

确定地址服务器 IP 跟轻量配置中心 IP 一致

ping jmenv.tbsite.net

没有问题

查看网络连接各状态连接数

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

EDAS 轻量配置中心,应用注册上却无法调用服务提供者
发现有大量的time_wait

修改参数

vim /etc/sysctl.conf
添加
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
修改参数含义(参数更改from https://www.cnblogs.com/softidea/p/6062147.html):
net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间
使配置生效
/sbin/sysctl -p
更改后再次查看
EDAS 轻量配置中心,应用注册上却无法调用服务提供者

time_wait减少后,服务调用正常了

这种方法只是暂时解决表面time_wait问题,但是出现time_wait的原因还需要结合代码排查

上一篇:记一次redis异常停止排查及参数优化


下一篇:纳管集群接入日志服务