副标题:trouble shooting方法论
前言
人处在互联网时代的最大美德便是,如果您对任何事情怀有疑问,请优先选择询问搜索引擎。
什么是trouble,为什么要shoot它?
Troubleshooting is a form of problem solving, often applied to repair failed products or processes. It is a logical, systematic search for the source of a problem in order to solve it, and make the product or process operational again.
如果您还是不清楚什么是trouble shooting,请践行互联网时代的最大美德。
做事情是需要掌握方法的,方法对了才会起到事半功倍的效果。
下面便是笔者总结的定位和处理问题的方法论。共分为四个阶段,每个阶段形式上会有递进关系,实质上都各有独到之处,并无高下之分。笔者学识经验有限,欢迎批评指正。
第一阶 人生苦短,我看log
学会看日志,是定位问题的基本功。
一般初学者,发现系统出现问题,一般只能观察到事情的表象,难以发现问题的症结所在,属于传说中的一脸蒙 B 状态,不知从何入手。稍有经验,就会渐渐发现,日志里能够获取部分信息,但是在信息与理解之间横卧一个巨大的鸿沟(在想这 TM 到底是什么鬼?!)。当无数次混迹于鸿沟之后,蓦然回首,才发现log是世界上最美的语言,没有之一!
那么为什么日志对于解决问题如此重要呢?我认为,首要原因应该是日志里有对问题的追根溯源的程序级描述。这是我们能够获取到的第一手也是最重要的信息资源。其次,调整日志的不同级别,可以在不断假设检验的过程中排除它因,围绕问题本身玩科学实验。在这个过程中,我们可以探索实践再探索各种可能性,逐渐趋向于我们所求索的那个答案。
那么看日志的最佳姿势是什么呢?
1 先分析问题的表层触发因子
A basic principle in troubleshooting is to start from the simplest and most probable possible problems first.
2 沿着错误信息回溯,看错误日志的触发源在哪里
3 分析各个可能的原因,逐一攻破
A troubleshooter could check each component in a system one by one, substituting known good components for each potentially suspect one.
第二阶 它山之石,可以攻玉
会不会使用Google,是ordinary human和coding monkey的根本区别。
在互联网的世界里,没有了搜索引擎,世界便是一片散沙。而搜索引擎的出现,正是为我们个人的资源获取能力赋能。
在现代社会,搜索引擎或许会是我们最好的老师。而如何与老师相处又是一项极其重要的能力。当我们遇到问题,自己百思不得姐的时候,及时发出求助也是解决问题的很好的办法。
那么使用搜索引擎的最佳姿势是什么呢?
1 google搜索使用方法官方文档
2 google高级使用
第三阶 上帝之眼
上帝说,这个世界的本质是概率的,但是你们这支智人只能从因果关系中理解世界。
当圄于事件本身,我们终究不得解时,或许,我们应该跳出框框,重新来审视一下这个世界。
为索求哲学意义上的完整与根本,其实,我们还有一条简易之路可以走。
这条路便是:
画数据流图,画数据流图,画数据流图。重要的事情说三遍。
在数据流图中,我们索求因果。在发生bug的前前后后,都发生了些怎么样的故事?触发这个问题的根源可能是在哪里?很有可能,你会突然发现,你的trouble之因可能并不在你。或许是依赖不存在问题,或许是上一级发生了数据流阻塞,或许是某些条件没有满足……
总之,问题的诱因可能并非问题本身所告诉你的那样,富有经验的工作者喜欢称之为“环境问题”(当然,不愿意排查自身问题的推脱者也喜欢经常把这话挂在嘴边)。
那么开启上帝之眼的最佳姿势是什么呢?
打开Google doc,开始画吧。
注意,这只是通往上帝之眼的第一道门。在这个概率统治的世界里,我们唯一能做的,只能是与不确定性共舞。而其中境界,没有最高,只有更高。
第四阶 大胆假设,小心求证
当我们已经找到了通往上帝之眼的道路,还需要“科学”这支拐杖吗?
科学精神与上帝之间,本质上是相通的。正如我们用两条腿走路一样,二者缺一不可。
如题,“大胆假设,小心求证”便是科学精神的精髓。
“大胆假设”,是说在不确定的世界中充满了各种可能性,而每一种可能性都值得我们去尝试去探索,因为每一条路都可能通往真理的殿堂。“小心求证”,是说对于每一种假设,我们都会以谨慎的态度在实践中去不断践行和验证,最后甄别出通往真理的那一条。
当我们遇到bug时,“大胆假设”便是分析各种可能导致问题的原因,“小心求证”便是对各种可能的原因,控制单一变量,单独对每一种原因进行单独测试,依次排除各种可能的原因,最后定位到问题是所在。
那么开启科学方法的最佳姿势是什么呢?
这应该已经不是问题了。
总结
定位解决问题,大致分为四个层级:
第一阶:查看log,关注问题本身
第二阶:使用Google,学会提问
第三阶:画出数据流图,宏观定位问题
第四阶:使用科学方法,排查问题
修炼好这四阶功夫,能帮助你独立定位解决大部分的问题。
当然,修行之路永无止境,愿bug成为你的好朋友。
提问
1 以上方法都用了,你没说的方法我也都用了,但是还没解决问题怎么办?
好问题!建议您去冲个澡或者喝杯咖啡,很有可能问题的答案会在不觉中浮现噢~
2 我刚才去喝了杯咖啡,但是问题的答案并没有浮现,我该怎么办?
…… 好!问!题!去和您身边的小伙伴交流一下吧,这可是增强机油润滑能力的好机会……祝好运。
3 机油也无能为力,我该怎么办?
就目前的情况来看,或许这个问题暂时并不适合您……let it go!!!
参考引用
Troubleshooting wikipedia