最近几个星期,我一直在跟一个十分诡异的bug做斗争。我的一个服务端程序,它要跟另外一个服务保持持久的连接,要认证终端用户,然后执行一系列的数据操作。
不知为什么,时不时的,这个程序会丢失socket连接。也不是经常发生,但也不是很罕见,就是过一段时间,运行这个服务的机器就会资源耗尽,无法响应——因为积压了太多的无法处理的请求。
这个问题快把我搞疯了;我找不出问题出自哪里,我的时间全被这个问题占用了,一边盯着要在服务彻底宕机前重启它,一边来回分析这段代码。就是这段,让我来展示给你看….
等一下。
这里不是我的办公室。我没有坐在办公桌前。电脑也不在身边。我他妈的在什么地方?
四周都是人。很闹。看起来像是一个Party。
嗨,我的手为什么湿了?哦,看,是一杯饮料;黑的,透亮,看起来像是一杯可乐。没错,是可乐。很凉,但里面没有冰块。白色的小餐巾纸浸透了,它的边缘被我用手揪的粉碎,所以我猜我已经在这待了好一阵了。
没错,现在我记起来了。这是公司同事的聚会,是Dan邀请我来的。是有人过40岁生日,也许是50。我记不清了。Dan是个不错的人,但我们的性格大相径庭,他是个话痨。估计他以前是卖保险的。
还好,在这里,我不需要穿西装。而且也不需要穿的像电梯旁边的那个傻冒那样。真的,为什么要在Party上穿连帽衣呢?
不过,谁会在意呢。他已经按了电梯,所以他很可能打算出去。哦,不,老弟,别在用iPhone看Facebook了,电梯门就要关了。灯灭了,你错过了这趟。哈哈,你就是个傻冒,你…
哇噢。
他不留神。他错过了电梯。
我敢跟你打赌,这就是我代码里的问题。如果远程服务挂了,而我还在等待接收认证码,应用没有收到通知,于是报错,socket丢失。
就是这样。两个星期的折磨,找到问题的灵感竟然来自一个到处都是买保险的人的公司Party上。还有在手上的一杯走了气的可乐和一张撕碎的纸巾。
我也许因该现在就走,回去验证一下我的灵感。但我也不想被人认为太不礼貌…我需要找个时机,神不知鬼不觉的溜出去。我不能再待在这里了。我已经被这个问题折磨的太久。
哦,见鬼。Dan走过来了。他乐呵呵的,后面还跟着一个老家伙。
唉。我估计走不掉了。他们真的是要过来和我聊天吗?Dan,我不爱说话,你不知道吗?我祈祷Dan改变主意。我不能在这浪费口舌,说不定这绝妙的灵感在我坐到键盘前时会消失的无影无踪。
嗨,这是你们的CEO。哦,是吗。很高兴见到你。面带笑容。微鞠一躬。点头。我一定是快把那个该死的电梯和认证码给忘了。没错,Dan是一个不错的家伙。哦,他跟你说到过我?真是好人。我相信他一定没告诉你关于那个该死的bug的事,你们在阻挡我去彻底的解决这个问题,只有解决了它我才能终于睡上一次好觉了。
终于,他们走了。我很可能把这次谈话搞砸了,通常都是这样。他们可能会认为我脑子有问题。或不善交际。我现在真的毫不在意,因为我终于找到这个该死的bug的原因了。
我还是赶紧呼叫电梯吧,以免又有哪个天才的家伙试图过来浪费我的时间。我不会错过这趟电梯。我搞定了一个bug!