问:现网出故障了怎么办?
答:木有不出故障的现网,遇到报障,首先需要的是冷静,然后有一套解决思路(包含安抚客户),尽最快的能力修复问题,给客户一个能接受的合理的理由。
问:处理现网故障需把握住哪些点?
答:态度积极友好、回复一致合理
1: 态度
在没有定位清楚原因前,不和客户争辩/推卸责任。
非我方原因时也需要积极配合其他方定位问题。
2: 给客户一致且合理的回复
在和客户解释故障原因时最好有指定的回复人,其他成员保持沉默,切记多个人和客户说出多个原因。
问:怎么解决故障?
答:定位、分析、方案、修复、升级。
本文着重讲解定位和分析,且非功能Bug的故障。
- 定位故障的前提
定位故障需要有两个前提,一个是熟悉环境/业务,另一个是有正常情况的峰值数据。
前提一:定位者熟悉网络部署、逻辑部署、业务/功能流程、应用配置。
首先能立马判断出功能缺陷?还是性能问题。
其次在定位前排查时不需要任何人的指导,就能快速去验证他的猜测和所想。
切记:不要找一个对以上四个方面都不熟悉的纯技术牛人来主导定位,纯技术牛人适合做协助,而不是把他放在一个陌生的环境让他来主导整件事情。
因为他什么也不熟悉,他要更快的定位问题,就会问N个问题,等他问完一堆问题,时间也就悄然流逝啦。
前提二:有正常情况的峰值数据。
有数据对比能立马找到异常点,可省却很多猜测后的验证工作。
-
定位问题第一步---确认资源使用情况
需要资源使用资源有Cpu、Memory、IO、Network。
确定资源使用情况.jpg和正常情况时的峰值数据比较,找出明显升高的地方。
不同类型的服务器(数据库服务器、应用服务器、图片服务器),各检查一台。
可以得到的结果:在某一类型服务器上某一资源使用率过高。 -
确定案发现场-定位异常起始点
3.1 以JAVA应用为例
倘若通过资源使用情况判断出是应用服务器有问题。
Cpu消耗高
jstack [-l ]<pid> | tee -a jstack.log
Java应用.jpg
找自己公司程序代码即可
Memory消耗高
显示java进程内存使用的相关信息
jmap pid #打印内存使用的摘要信息
jmap –heap pid #java heap信息
jmap -histo:live pid #统计对象count ,live表示在使用
jmap -histo pid >mem.txt #打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
jmap -dump:format=b,file=mem.dat pid #将内存使用的详细情况输出到mem.dat 文件
kill -3 #可以看到在catalina.out中看到新生代、年轻代、老年代分配情况。
ps: jmap -dump 和jmap -histo:live消耗大,会使得jvm处在假死状态的,造成服务中断,因此建议在服务瘫痪时使用它。
3.2 数据库服务器的问题
倘若通过资源使用情况判断出是数据库服务器有问题。
3.3 中间件的问题
以Tomcat为例,可用probe监控
主监控内存使用情况、线程使用情况、响应时间、请求量。
-
分析异常点
通过第3步的确定案发现场已找到了异常出没的地方,接下来就是具体问题具体分析啦。
如是JAVA程序的问题,不管是代码本身问题,还是架构设计上的问题,都需要CTO带着研发出解决方案。
如是中间件的问题,Tomcat中间件可改的内存+线程,还是解决不了问题扩展更多的Tomcat,升级Tomcat版本。
如是数据库的问题,以MySQL慢为例
数据库慢.jpg 总结
当接收到现网报障时,首先不要慌,耐心听客户描述完问题,安抚客户情绪(如客户有情绪时),诚恳跟客户说马上处理-不推卸问题,然后是真的马上安排人处理-不拖拉问题。
在定位问题时,首先确认服务器资源使用情况,定位是哪类型服务器出问题-圈定问题的范围,然后去具体服务器上查异常点,拿到具体异常点后,就该找谁找谁啦。
如果不能定位到具体的异常点,你就需要找一群人来帮忙,比如:DBA、开发、网络管理员。先不说找一群人来所需的时间和能不能都找到的问题,假设都一喊到位了,你需要跟他们解释现象,然后排任务,沟通成本蹭蹭蹭就上去,同时时间也过去了,客户的电话说不定也就再次过来了...。
最好的情况是你在问题出苗头的时候就问题,将问题扼杀在摇篮中,这个需要运维监控工具,现网是必须有一套的。
如没有监控工具,那你自己就需要有一定故障定位能力,确认问题后,你才能更快找到人来解决问题。
总之:你自己要强大。