tcp_tw_recycle参数引发的故障

转载地址: http://blog.csdn.net/wireless_tech/article/details/6405755

故障描述:
    2010年9月7日,新上线的手机游戏论坛有部分地区用户反应登陆游戏时出现不能登陆或登陆超时等情况,观察用户同时在线数量开始下降情况。


排错过程:
    一、初步检查是否有变更导致的故障:  
        1、联系同事检查网络是否有问题或有对该机房网络是否有进行过调整,反回结果是没有变更操作。
        2、检查在这个时间点是否有进行程序发布更新,或程序是否有作用户限制处理,反馈只进行日志调低的变更,但此类操作不影响用户的正常登陆和操作。
        3、检查系统,中午11:40左右有进行了降低等待连接数的内核优化参数修改。   
    二、处理过程:
        1、直接联系不能登陆的用户,进行登陆测试,发现同一个账号在不同地区进行登陆是正常,初步怀疑是网络问题。
        2、从用户了解到,在多款游戏中,除古墓以后,其它登陆正常.并与多位用户进行了确认。排除网络问题。 
        3、注释掉系统内核修改的参数,使期生效,并对resin服务进行重启等操作,继续观察人数还是没有上去,同比下降了一倍。
        4、进行服务迁移,将原有的三台前端APP机器迁移至另外三台,并进行接口调度切换。观察人数开始上升,用户那反馈也可以开始登陆,半小后人数上升到同比水平。故障恢复。
    三、分析
        当时修改系统内核参数如下:
        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 = 720  表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
 
总结教训
    1、初步定论在进行注释掉系统内核修改的参数时,使用命令sysctl -p,使注释的参数没有生效,出现部分手机移动用户登陆连接过早的释放和重连。由于修改过后的参数执行命令:sysctl -p之后,其新的参数值已经加载至内核,所以重启服务器并不能改变该值的状态。
    注:重新修改回该值的初始值必须在/etc/sysctl.conf中修改net.ipv4.tcp_tw_recycle = 0 然后再执行命令:sysctl -p之后才能生效。不能是指注释原来的那些参数后执行sysctl -p后就能改变的。当时一直急着恢复故障,未能冷静分析原因及未能正确修改此参数。切换机器后游戏恢复正常。然后再查资料好好理解上面参数的含义及如何修改。
    2、最先修改该值是因为机器负载过高,认为可以通过修改这些参数来达到优化的效果,处理过程中因为同一用户在不同地区可以登陆,认为是网络问题引起。另外对 net.ipv4.tcp_fin_timeout 参数值进行了增大,误以为可以通过增大这个值来既能使用户登录,也可以使机器负载不高。实际是不行的。
    3、我们在一些高并发的 WebServer上,为了端口能够快速回收,打开了 tcp_tw_reccycle ,而在关闭 tcp_tw_reccycle 的时候,kernal 是不会检查对端机器的包的时间戳的;打开了 tcp_tw_reccycle 了,就会检查时间戳,很不幸移动的cmwap发来的包的时间戳是乱跳的,所以我方的就把带了“倒退”的时间戳的包当作是“recycle的tw连接的重传数据,不是新的请求”,于是丢掉不回包,造成大量丢包。
    注:通过测试PC用opera连接进入无影响。

经验总结:
    通过此次故障,警示我们在进行日常程序,系统等变更,修改,重启等的操作上,需要我们严格按照流程仔细去进行测试,评估修改后的风险及出现问题回退和解决方法;特别是对内核参数的修改一定要理解透彻,不能盲目修改。然后进行逐步发布,避免故障影响全局。尽量让故障率降低。


在国际上,通常只有一种GPRS接入方式,为什么在中国会有CMWAP和CMNET两兄弟呢?(彩信之所以单独配置接入点是因为彩信服务需要连接专用的服务器,在这里不作探讨。)
其实,CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费上也存在差别。
(2) 什么是WAP?
WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式,不同于一般Internet的“终端+服务器”的工作模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。
WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。但据我所知,中国移动GPRS网络目前只有唯一的一个WAP网关:10.0.0.172,有中国移动提供,用于WAP浏览(HTTP)服务。有一点需要注意,WAP网关和一般意义上的局域网网关是有差别的,标准的WAP网关仅仅实现了HTTP代理的功能,并未完成路由、NAT等局域网网关的功能。这就决定了它在应用上所受到的限制。
(3) 中国移动对CMWAP的限制
为了从应用中区别两者的定位,中国移动对CMWAP作了一定的限制,主要表现在CMWAP接入时只能访问GPRS网络内的IP(10.*.*.*),而无法通过路由访问Internet。(少数地区的移动网络可能不存在这一限制。)我们用CMWAP浏览Internet上的网页就是通过WAP网关协议或它提供的HTTP代理服务实现的。
说到这里,就让我自然而然的联想到公司的网络,相信不少工作的朋友都有类似的体会。公司的网络在网关上不提供路由和NAT,仅仅提供一个可以访问外网的HTTP代理。这样,我们就无法直接使用QQ、MSN等非HTTP协议的应用软件了(好在它们还提供的有HTTP代理的连接方式)。CMWAP也正是如此。
(4) 适用范围
适用范围才是大家最关心的问题。CMNET拥有完全的Internet访问权,这里就不多说了,主要让我们来看看CMWAP。因为有了上面提到的限制,CMWAP的适用范围就要看WAP网关所提供的支持了。目前,中国移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口)。

猜你喜欢

转载自blog.csdn.net/liangzhao_jay/article/details/79207008