记一次生产 TCP 连接 ERR_CONNECTION_TIME_OUT

问题描述

某日,正在欢快的写bug时,微信群客户反馈某个页面无法正常显示,并附带截图。

解决过程

立马远程,F12查看console,具体情况如下

红红的一片,煞是好看。 废话不多说,立即连上服务器。

先说下网络架构

域名 ==》 nginx ==> 2台应用服务器,其中nginx 和 应用1共用一台服务器。

连上应用服务器后,查看进程(ps aux|grep java、ps aux|grep nginx)、CPU(top)、内存(free -m)、应用日志、一切正常。

初步怀疑是客户的网络有问题,为了验证猜想,联系客户,在出问题的电脑上装上 Wireshark 进行网络抓包,并设置过滤规则为指定 IP

经过一段时间等待,ERR_CONNECTION_TIME_OUT 再次出现,Wireshark 如下:

浏览器network如下

 可以看到请求在握手阶段就失败了。

为确认访客网络是否异常,使用cmd,ping -t baidu.com 挂了半小时,期间应用的其他请求有出现

ERR_CONNECTION_TIME_OUT,但是 ping baidu.com 没有出现波动。。。所以暂时排除客户网络异常。。。。。

继续查看服务器

输入 netstat -s | grep -i "listen",出现 syns to listen sockets dropped,但是并没有times the listen queue of a socket overflowed

 继续输入

netstat -s |grep "SYNs to LISTEN sockets dropped"

netstat -s |grep "passive connections rejected because of time stamp"

发现值一样

感觉sync to listen sockets drop的原因有可能与时间戳有关

查询相关资料,因为2.6内核以上中tcp_timestamps默认是打开的,所以当打开 tcp_tw_recycle时会导致部分通过NAT上网client无法正确连接服务器,故障表现为client发出SYN后无法收到server返回 的SYN+ACK

解决办法

vi /etc/sysctl.conf

net.ipv4.tcp_tw_recycle=0

/sbin/sysctl -p 生效

后观察一周未出现 ERR_CONNECTION_TIME_OUT

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值