20140613故障处理纪要

背景:约100万月活跃用户,APP版本BUG(至少4万用户死循环访问,堪比DDOS),修复历时7天7夜。

世界杯前夕,服务器拒绝访问,线程挂死,导致大量请求拒绝访问,少量能访问,但访问时间缓慢导致超时,相当于服务崩溃。

通过监听端口有效的访问连接数,最高可达1000并发。

netstat -an | grep ESTABLISHED | wc -l

访问量已经是无法控制,只能从应用入手,强制更新有bug的APP版本,把有BUG的版本的所有接口全部拒绝访问,以免影响其他版本的访问,但效果甚微。

我怀疑此时的并发量已经远远超出现有服务器的压力,如果并发量超出服务器的承受范围,那无论如何优化代码都是无事于补。为了验证服务器的极限,把所有接口都屏蔽(改成立刻响应,几乎不消耗太多的资源),经过测试发现,每开启入口,线程池立刻满上,无论如何调大入口数,最大连接数,系统文件最大打开数(Linux ulimit)等参数,到达某一瓶颈值就立刻线程挂死,拒绝访问,此时系统资源如CPU、内存、IO等系数都消耗不大,由此推断我们web容器已经到达了瓶颈。

现在只剩下一个方案:扩容。扩容有两种方式,垂直扩容,横向扩容。垂直扩容相对需要时间有点长,需要安装节点,添加节点等操作,还需要测试,还会存在多种不确定风险,毕竟对现网服务器动手脚。横向扩容是最佳方案,因为有现成的集群服务器可以用(另外项目已经停止,服务器空闲),可以通过现网服务器集群的上一层做分流(F5),把一半的流量分过来新集群。于是我们重新部署了应用到新集群服务器。开启分流入口,系统业务恢复,访问正常。

好景不长,大概运行了半天时间,发现web容器线程忽然飙升到某一瓶颈值大部分挂死,拒绝访问。我又开始怀疑难道扩容都还不能支持现在的压力,经过了强制更新和旧接口的拒绝访问,性能消耗应该有所下降了。但发现有一个奇怪的问题,线程一开始是正常的,就是运行到某一个时间段是忽然慢慢上升,直到瓶颈值挂死,我开始怀疑应用同样存在瓶颈,开始向代码入手。由于历史原因,查看代码也是一件要命的事情,在这里消耗还不如查看运行日志,但同样是历史遗留问题,日志的错误一大堆,之前是因为不影响业务运行就不管,因为以前系统从tomcat迁移到was的,tomcat的兼容性好,没有什么错误,但是迁移到was后就报出一大堆问题,可能是was的要求比较高,但是后来没人改修改,不影响现网运行就不理。所以现在从日志入手也是一件很痛苦的事情,但这是没办法中的办法。把一个10M的日志文档拿下来,一个个错误排除。功夫不负有心人。终于让我发现了点苗头。发现了线程挂死的接口,后来经过了代码的排查,终于找到问题所在,是因为这个接口用到了synchronized,难怪线程会挂死,之前不会发生死锁的原因访问量不大,现在访问量通过推广和那个致命的BUG,不挂死才怪。

后来经过了代码的修改和完善,把所有有用到了同步的都修改了,重启应用打开。应用访问正常、线程正常、但是数据量CPU消耗有点大。通过对数据库的排查,发现,是应用的业务逻辑很多没有梳理好,SQL的许多的硬解析导致了数据库CPU消耗比较高,但这是历史遗留问题,现在一个个是非常不现实的,我们只能对消耗较高的SQL进行完善。

经过几天的系统运行,相对稳定,就是数据库CPU消耗时高时地,这个应用的推广活动有关,但还不至于导致服务器倒闭或挂死。

系统稳定后对现网的所有日志等数据进行分析,发现我们APP的用户数增长比较快。如果安装现在的增长速度,必须还的提前申请服务器扩容(系统客户可以重视和给力)。

现网的系统架构是当初以一个“企业应用”建立的,还包括了许多历史遗留问题,只能说too young too simple。

现在已经是百万级用户的APP了,看来,架构需要重新设计和规划了。其实万事具备,只欠东风(客户的重视度)。我只能说,系统≠软件+硬件,系统=软件+硬件+沟通+企业政策+任何关联因素。

20140613故障处理纪要

时间: 2024-10-13 11:46:41

20140613故障处理纪要的相关文章

【故障处理】告警日志报“ORA-01565 Unable To open Spfile”

[故障处理]告警日志报"ORA-01565 Unable To open Spfile" 1.1  BLOG文档结构图 1.2  故障分析及解决过程 1.2.1  故障环境介绍 项目 source db db 类型 RAC db version 12.1.0.2.0 db 存储 ASM OS版本及kernel版本 SuSE Linux Enterprise Server(SLES 11) 64位 1.2.2  故障发生现象及报错信息 客户的12.1.0.2的RAC库告警日志报ORA-0

Java虚拟机8:虚拟机性能监控与故障处理工具

http://www.cnblogs.com/xrq730/p/4842483.html 前言 定位系统问题的时候,知识.经验是基础,数据是依据,工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异常堆栈.GC日志.线程快照.堆转储快照等.经常使用适当的虚拟机监控和分析的工具可以加快分析数据.定位解决问题的速度. jps:虚拟机进程状况工具 首先约定一下运行的代码都是以下这段 1 public class TestMain 2 { 3 public static void main(St

【故障处理】ORA-12162 错误的处理

[故障处理]ORA-12162: TNS:net service name is incorrectly specified 一.1  场景 今天拿到一个新的环境,可是执行sqlplus / as sysdba的时候不能登录,报ORA-12162: TNS:net service name is incorrectly specified的错误,之前没有碰到过,就随时记录下,备查. 一.2  实验还原 Last unsuccessful login: Thu Mar 19 16:59:06 BE

【第五组】第十三次冲刺例会纪要 2017/7/26

第十三次冲刺例会纪要 开发小组:Hunger Killer 冲刺经理:衣俊霖 小组成员:张竣杰,董泽昊,赵美,宋寅瑜,徐志国 A:张竣杰 负责部分:管理员界面 昨日所做工作:研究关于下拉列表刷新问题 遇到的问题:尚未解决 今日计划:尝试解决,优化界面 B:衣俊霖 负责部分:注册界面 昨日所做工作:记住密码已实现,优化界面 遇到的问题:构思用户服务的函数 今日计划:写用户服务,写登录后端 C:董泽昊 负责部分:趣味决策 昨日所做工作:图片上传显示解决 遇到的问题:界面急需优化 今日计划:链接真·数

【第五组】第六次冲刺例会纪要 2017/7/18

第六次冲刺例会纪要 开发小组:Hunger Killer 冲刺经理:衣俊霖 小组成员:张竣杰,董泽昊,赵美,宋寅瑜,徐志国 A:张竣杰 负责部分:管理员界面 昨日所做工作:实现本地图片上传,学习后端 遇到的问题:上传成功但是无法排版 今日计划:通过后端代码进行解决 B:衣俊霖 负责部分:注册界面 昨日所做工作:各种空白检测,用户名密码长度检测 遇到的问题:依旧用户服务迷糊,以及ContentDialog 今日计划:解决问题,做登陆界面 C:董泽昊 负责部分:趣味决策 昨日所做工作:写文档,学习后

【第五组】第三次冲刺例会纪要 2017/7/13

第三次冲刺例会纪要 开发小组:Hunger Killer 冲刺经理:衣俊霖 小组成员:张竣杰,董泽昊,赵美,宋寅瑜,徐志国 A:张竣杰 负责部分:管理员界面 昨日所做工作:学习控件 遇到的问题:控件不熟悉 今日计划:完善前端代码,完善界面 B:衣俊霖 负责部分:注册界面 昨日所做工作:写文档,捣鼓遮挡的界面,学习邮箱识别算法,密码匹配识别 遇到的问题:由于控件使用问题引发的显示错误 今日计划:完善前端代码,解决问题 C:董泽昊 负责部分:趣味决策 昨日所做工作:学习story board来完善转

【故障处理】一次RAC故障处理过程

[故障处理]一次RAC故障处理过程 1.1  故障环境介绍 项目 source db db 类型 2节点RAC db version 11.2.0.1.0 db 存储 ASM OS版本及kernel版本 RHEL 6.6 1.2  故障处理过程 晚上10点多,一个网友喊我帮忙处理RAC宕机不能启动的问题,并且告知涉及到多路径和存储的事.小麦苗对存储一向不太懂,多路径也没怎么接触,自己也没研究过这个东西.既然找到了我,那就不能不管啊,硬着头皮上去看看.结果悲催了,搞了N个小时,求助了N个人,搞到第

【故障处理】分布式事务ORA-01591错误解决

[故障处理]分布式事务ORA-01591错误解决 1  BLOG文档结构图       2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 分布式事务的简单概念         ② ORA-01591错误解决   Tips: ① 本文在ITpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(x

【项目管理】现网故障处理

PS:笔者是产品经理,因为工作须要兼岗项目经理,所以本文站在项目经理的角度来讨论怎样解决这个问题. 1. 工作案例 这段时间多个项目并行,每一个项目也有多个版本号须要管理.节奏非常快. 上周公布一个优化性能的版本号之后,本周一收到了非常多外网用户的反馈:"打开***游戏之后.居然弹出了网页广告,差点把机器卡死了". 经过跟外团(外部測试团队)进行沟通,得知是游戏版本号更新后导致的. 2. 现网故障 现网故障是指直接或者间接影响到用户正常使用产品. 比如:QQ无法登陆.百度首页打不开.支