天天看點

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的原因還需要結合代碼排查