問題背景:
某服務突然無法調用注冊在輕量配置中心的服務提供者,但登入輕量配置中心控制台是可以搜尋到對應的服務,且服務提供者的 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]}'
發現有大量的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
更改後再次檢視
time_wait減少後,服務調用正常了
這種方法隻是暫時解決表面time_wait問題,但是出現time_wait的原因還需要結合代碼排查