1.背景
最近组内入职的新人比较多,大家排查问题比较费时间,也比较痛苦,我抽时间整理了一下我自己常用的排查问题的思路和技巧,在自己的博客里也分享一下。
- 程序员的平时工作写代码只占很小的一部分,很大一部分都是在 查问题和 讨论和设计方案选型
- 有的同学觉得 遇到奇怪的问题,不知道怎么入手排查
- 经常解决各种问题也能提高风险意识,后续设计方案的时候才会知道怎么去避免这些问题
- 大家在平时解决问题的时候,多思考怎么系统高效的解决问题,自动发现和解决问题
- 每个系统其实都有不少问题,需要大家努力思考
2.排查问题技巧
- 排除法 (基于问题的表现,我们能够知道哪些因素是可靠的,采用排除法查找问题)
- 本地测试重现问题 (很多问题尽量本地重现,可以debug。本地如果不能重现,大概率是和生产的配置不一致)
- 日志 (加日志,帮助排查问题)
- google (开源框架的问题可以google)
- 看源码 debug
- 找人沟通,换一种思路,有时候自己排查问题很久可能会钻进死胡同
总的来说排查问题就像破案一样,要多思考:
7. 能否恢复当时的现场
8. 最早案发时间时什么时候 (check这个时间点是不是有发布)
9. 问题是否时必现的, 还是偶发的
10. 平时一定要做好日志,否则连案发现场都没有 (当前云上默认没有info日志,需要靠问题复现)
3.重视问题
- 生产问题的重要性
生产问题是最高优先级,比手头任务优先级高,需要优先排查 - 排查问题也是工作的一部分
问题也是工作很重要的一部分,我们要重视它,我个人还是比较喜欢排查有挑战的问题的,就像破案一样。 - 排查和解决问题也是成果
写业务的挑战其实有限,真正在遇到问题的时候才是真正的挑战。否则你会感觉做了很多东西,但是都是CRUD,没有遇到什么难点。
有时候 对外讲项目真正值得拿出来讲的,恰恰是哪些关键的难点和问题。遇到了什么样的难题,用什么办法解决了,这才是最大的亮点。 - 个人成长
我感觉个人成长最大时候都是我们遇到难题,克服难题的时候。而不是我们写了多少业务需求。业务需求写的多,也只是把类似的事情重复了很多遍,做的更加熟练。解决问题或者踩坑,能形成风险意识,能够帮助技术选型。
4.问题分类
解决问题首先要思考这是一个技术问题还是一个业务问题,有些问题是可以和业务沟通,尝试优化业务逻辑避免问题降低成本。
- 业务问题 or 代码问题
- 内部问题 or 外部问题