前段时间碰到一个问题,我们的后台服务器负载量不大的情况下,同一办公地点的移动设备经常请求失败。仔细询问后发现,用wifi的时候就会出现这种情况,用手机热点共享的网络进行请求都能成功。
处理步骤如下:
1.查看后台程序,状态正常,且没有错误日志。
2.经过第一步排查,应用程序没有问题,我们找网络部的同事帮忙抓包,发现有一些请求,收到了SYN包,但是没有返回。
3.网上查了查,说是tcp_tw_recycle设置有问题,于是我们找到/etc/sysctl.conf文件,发现tcp_tw_recycle的值设置成了1(开启),于是我们改为了0(关闭),然后一试果然可以了。
问题解决,我进行了一下复盘,发现开启这个tcp_tw_recycle一般是为了减少负载。
wifi下发起请求,后台接收到的ip是一样的。
发起请求的时候会传一个timestamp时间戳参数,同一ip传递的时间戳最大的那台设备可以请求成功,其他均失败。
但是发现用360wifi的时候,没有timestamp这个参数,所以即使tcp_tw_recycle开启的状态下,多台设备使用同一360wifi也是都可以成功的。(这一点发现蛮有意思的)
tcp_tw_recycle默认值是0,还有一个tcp_timestamps参数和前者左右差不多。
如有写得不对的地方,烦请指出,我会积极吸取并改正。