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

排错过程:

一、初步检查是否有变更导致的故障:  
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_recycle ,而在关闭 tcp_tw_recycle 的时候,kernel 是不会检查对端机器的包的时间戳的;打开了 tcp_tw_recycle 了,就会检查时间戳,很不幸移动的cmwap发来的包的时间戳是乱跳的,所以我方的就把带了“倒退”的时间戳的包当作是“recycle的tw连接的重传数据,不是新的请求”,于是丢掉不回包,造成大量丢包。

注:通过测试PC用opera连接进入无影响。

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

tcp_tw_recycle参数引发的故障相关推荐

  1. 网络优化之net.ipv4.tcp_tw_recycle参数

    本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,(http://vincent.bernat. ...

  2. 原来这些元器件最容易引发电路故障。。。

    01  电容故障 电容损坏引发的故障在电子设备中是最高的,其中尤其以电解电容的损坏最为常见. 电容损坏表现为:容量变小.完全失去容量.漏电.短路. 电容在电路中所起的作用不同,引起的故障也各有特点:在 ...

  3. 不要在linux上启用net.ipv4.tcp_tw_recycle参数

    本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,但并非完整的翻译,译者CFC4N对原文理解后, ...

  4. tcp_tw_recycle 参数导致的K8S网络问题

    问题现象 客户端访问对端服务器端口,时通时不通. 多数服务出现连接nacos 500问题 排查记录 检查服务到nacos的连接是否正常 通过进入到容器当中,去ping external-nacos.d ...

  5. 一个purge参数引发的惨案——从线上hbase数据被删事故说起

    一个purge参数引发的惨案--从线上hbase数据被删事故说起 在写这篇blog前,我的心情久久不能平静,虽然明白运维工作如履薄冰,但没有料到这么一个细小的疏漏会带来如此严重的灾难.这是一起其他公司 ...

  6. Postgres 数据库大批量单表导入数据引发性能故障的处理

    因公司经营管理策略原因,我们地区部门还是以开发外包和产品服务为主,对测试外包服务销售工作要求占比不高,而测试部门本来有四五个性能测试人员,加上老员工都比较积极做事在测试团队建设管理上不用花费太多精力. ...

  7. linux内net.ipv4.tcp_tw_recycle参数一定不要启用

    linux内net.ipv4.tcp_tw_recycle参数一定不要启用 net.ipv4.tcp_tw_recycle = 0 本文为转载译者achejq博客的原文,目的是为了加深自己知识点的记忆 ...

  8. oracle ASH之隐含参数_ash_size过小故障问题

             Oracle ASH空间过小导致的故障问题隐含参数_ash_size 今天现场数据库又说出了问题,表现就是hang住,无法提供服务.打开alert日志如下: Fri Aug 17 1 ...

  9. 一个 JVM 参数引发的频繁 CMS GC

    了解 CMS GC 的同学,一定知道 -XX:CMSScavengeBeforeRemark 参数,它是用来开启或关闭在 CMS-remark 阶段之前的清除(Young GC)尝试. 大家都知道CM ...

最新文章

  1. CF735E Ostap and Tree
  2. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 后续分析 | Application 替换位置 )
  3. 正则判断是否有html标签,正则表达式匹配所有HTML标签,除了和
  4. 存clob为空的值_给Oracle数据库中CLOB字段插入空值
  5. 大数据标签获取处理步骤_大数据处理分为哪些步骤
  6. springboot做网站_Github 上 Star 最多的个人 Spring Boot 开源学习项目
  7. JavaFX UI控件教程(二十三)之Menu
  8. Git系列笔记之一:git的简介及基本配置
  9. linux 磁盘监控,9个在Linux中监视Linux磁盘分区和用法的工具
  10. (转)马云:不要迷信成功学 要多看别人的失败经历
  11. 自己用GO语言编写的AliDDNS动态域名更新服务,routeros
  12. 英文网站建设应该如何做?如何建好一个英文网站?
  13. 为什么大部分人,会对南北经济“差距”产生误解?
  14. 毕业设计网站项目的开发流程
  15. opencv python教程简书_OpenCV-Python教程:57.图像修复
  16. 504 gateway timeout解决方法
  17. linux删除配置信息,linux 配置信息
  18. C语言 —— pta寻找孪生素数 (20 分)
  19. 【性能测试】性能测试的概念和术语介绍 性能测试分类(了解每种测试的目的)
  20. 笔记:OpenCV之眨眼检测

热门文章

  1. 写一篇关于PC车间复工生产的新闻稿
  2. java获取组合框值_在Java swing中获得组合框值
  3. 基于javaweb的留学生信息交流论坛
  4. comboBox获取值
  5. 硬盘杀手!Windows版Redis疯狂占用C盘空间!
  6. 如何更好更正确的利用VMProtect保护你的软件
  7. 实验2 C++对C的扩充
  8. A B C类IP地址的判断
  9. CY3-peg-海藻酸钠|海藻酸钠-荧光染料CY3|alginate-Cyanine3
  10. Tyramide Cy5.5,Cyanine5.5 Tyramide,花青素Cy5.5酪酰胺远红色近红外发射染料