系统出现故障怎么办?
极客时间编辑部
讲述:丁婵大小:6.88M时长:05:01
你好,欢迎收听极客视点。
对于程序员来说,最不愿意看到的就是线上运行的系统出现了技术性故障,但这种情况几乎在每个程序员的职业生涯中都能遇到。处理这类故障特别考验一个人的综合能力,因为它不仅涉及到排查问题所需的技术能力,还会涉及到抗压能力、对外的沟通能力等等。
处理故障主要包括保留现场、恢复、定位、解决、复盘五个步骤。
1. 保留现场
保留现场最重要的一件事,是保存异常程序的 Dump 文件。有了它,你就可以摆脱盲人摸象式地分析问题,快速定位问题的发源地。
此外,如果系统的监控体系并不完备的话,你还需要将问题发生时,操作系统、各第三方组件自带的监控数据快速地通过截图保存下来。保存监控数据的时候,要特别留意一下网络相关的数据。如果发现网络相关的数据有异常,那么再把当下的网络连接情况通过命令保存下来。因为相对来说,网络出现问题的概率远远大于硬件,规模越大的系统,越是如此。
2. 恢复
恢复系统访问有很多方法。很多程序员最常用的方法就是重启,这个方法几乎适用于 80% 的情况。而重启又分为自然重启和强制重启,在遇到故障时,应优先考虑自然重启,这样能避免产生一些意料之外的脏数据。但如果是系统出现资源耗用异常的话,就不要傻傻地等自然重启了,只能强制重启。
第二种常见的恢复方法是回滚。使用回滚的前提条件是,故障与最近一次发布有关。反正,盲目的回滚不但起不到作用,还会越弄越乱,特别是在分布式系统中。因为在分布式系统中,一旦上下游耦合的地方出现对接不上的情况,轻则报错,重则出现大量的异常数据。
第三种常见的恢复方法是降级,暂停出问题的模块,停止服务。当然,这个动作需要和业务方做好沟通,避免出现单独降级某个模块导致业务不完整之类的问题。
第四种常见的恢复方法是限流或者扩容。如果你发现是系统扛不住突增的流量,而导致发生故障的话,可以快速扩容几台机器和程序。无法扩容的话,可以选择限流,将一定百分比的请求直接拒绝服务。毕竟所有请求无法提供服务和部分请求无法提供服务相比,肯定还是后者划算。
除了以上四种方法,还有一些比较小众的方法是切到备机、故障隔离等,这里就不展开了,因为它们对环境、条件的要求更多一些。
3. 定位
关于定位问题,如果有 Dump 文件的话最方便了,通过 Dump 文件分析工具来分析,就可以快速定位到出问题的代码行,特别是程序阻塞、内存溢出、CPU 100% 之类明显是程序本身的问题。
不同的语言有不同的 Dump 分析工具,它们的最终目的就是定位到异常点的堆栈信息,有了它就相当于直接把问题代码出现在哪里都给定位到了。
此外,还可以通过监控数据、日志层层分析来定位问题。当你在看日志、监控数据的时候,一定要有关联起来看的意识,而不能仅仅在单个维度上看。因为有时候你在单个维度上看到的数据像是正常的,但是你关联起来看就不一定了。比如,TCP 连接数降低了一半,但是内存反而涨了 100%,为什么?这里面可能就藏着故障的线索。
4. 解决
定位到了问题,解决起来就很简单了,该改代码的改代码,该改配置的改配置文件。不过情况太多,大家遇到的可能都不太一样,这点就不展开聊了。
5. 复盘
你一定知道复盘的种种好处,但在实际操作中,却很少真正地自己进行复盘。如果你不知道从何下手来做复盘的话,不妨从以下几个问题入手:
这次故障原因是什么?
在当时是否有更快的方式来恢复业务?
如何避免再出现类似故障?
当前系统中是否还有类似的潜在风险?
如果你能回答这些问题,那么这个复盘就很到位了,剩下的就是执行。当然了,不管如何优秀地处理故障,最理想的情况还是不要发生故障。
以上就是今天的内容,希望对你有所帮助。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- InfoQ_e3b2957cd337学习了
收起评论