“每天上班7小时,每周上班5天。但手机一定要保持24小时开机,一旦有故障发生,一定要在15分钟内响应,有必要时要立即赶赴现场处理,有没有问题?”
“没问题!”朱恨痛快地答应了一声。对于一个即将毕业的学生来说,有什么比找到一份工作更重要的呢?而且还是自己梦寐以求的程序员工作。面试很顺利,让朱恨相信自己的未来充满阳光。
然而,9年后的今天,朱恨坐在G市的小蛮腰顶层,俯视着珠江两岸的万家灯火,回想起9年的程序员生涯,感慨万千。如果上帝曾给他一双看透未来的慧眼,那么9年前的他一定会坚决地对这份工作say no!因为他万万没想到,从接受这份工作开始,迎接他的就不再是阳光灿烂的未来,而是一个永远无法摆脱的噩梦。如果世界上真有一个上帝----他曾经那样的期盼上帝对他的人生指引,而现在的他,却对上帝的存在怀有深深的恐惧之情。
朱恨永远不会忘记卓老师私下跟他探讨“上帝”这个话题时所说的话。
老师说:“其实程序员就是上帝,程序员用枯燥的代码创造出一个个绚丽多彩的程序,每个程序就是一个小小的世界,在程序世界里,一切都按照程序员设计的规则运行。你说,这和上帝创造世界有什么不同?”
一直以来,朱恨都认为:如果世界上真的有上帝,那他一定是个像卓老师这样的程序员。卓老师对他亦师亦父,不但教给他扎实的计算机技能,也教给他做人的道理,现在又给他介绍了一份好工作。对卓老师,他心里永远只有感激。
新员工的生活忙碌而充实,前两周在各种入职培训中度过,从公司制度到客户服务规范,从行政领导到客户经理,满满当当二十节课,还有数十份厚薄不一的文档。
培训完后,朱恨被分到代号为X5的安全项目组,和他一起分到X5的还有一名一起参加培训的新同事谭旺,两人年岁相仿,都是应届生,虽然程序员话都不多,但两周的相处,也还算是混熟了。
从第三周开始,项目经理张工指导他和谭旺接手项目代码,他接手的是X5项目的数据监控程序。这个程序和黑客程序的性质很像,成天监视着电脑被谁访问了,哪个数据被谁读过,又被写进了什么样的新数据。总之,怎么说呢,就好像是一双成天盯着电脑的眼睛,这双眼睛高深莫测,永不言眨,忠实地记录着电脑上的一切使用痕迹。
经过两周的熟悉,朱恨已经对公司的开发框架和项目代码有了初步的了解,慢慢开始掌握这个高深程序的运行逻辑。
时间过得很快,一个月时间过去了,拿到第一个月薪水的朱恨非常兴奋,虽然作为实习生,工资不多,但是自食其力的感觉真好啊。朱恨和谭旺商量一起请师傅张工吃顿饭,张工很痛快地答应了,还答应他们将部门经理老韦一起叫上。可惜老韦经常出差,并没有来赴宴。当然,张工也没有让两位实习生请吃饭,而是由他请两位徒弟吃了一餐好的。
说到老韦,自从他面试了朱恨之后,似乎很少时间看到他出现在公司,以至于朱恨都快忘记他面试时所说的要24小时开机待命的话了。直到入职后将近3个月的时候,有一天凌晨1点,突然一个电话把朱恨吵了醒来。
“朱恨,我是老韦。东江通信的数据监控程序发生紧急故障,要马上处理,给你15分钟时间,接入到公司的网络,远程到办公电脑上!”老韦声音很急,一说完马上就挂断了电话。
朱恨一时还没搞清楚什么状况,只得先穿好衣服,打开电脑。刚远程到公司的办公电脑中,办公邮箱就提示收到新邮件,是老韦发给他的服务器的日志文件。老韦同时在办公QQ中描述了故障的大致情况:
客户的维护人员连续收到了7条告警短信,说数据监控程序没有心跳消息。心跳消息是每分钟发送一次,也就是说监控程序已经连续7分钟没有响应了。但同时,进程监控程序并没有报警出来,说明程序仍在运行,并没有被关闭掉。更奇怪的时,故障只发生了7分钟,现在心跳消息已经恢复正常了。我刚传给你的是数据监控程序的运行日志,这块是由你来接手的,你马上分析一下日志,看能不能找出故障原因。
“好的”朱恨在QQ上回复了这条消息。
“对了,第一条告警短信收到的时间是01:01:57,短信有大约30秒的延迟,也就是具体故障时间是在01:01至01:09这段时间内。”老韦又发来一条信息。
老韦也是程序员出身(据说是公司元老之一,国内顶尖的C++高手),描述问题非常技术化。朱恨在脑子里翻译了一下,大致是这么个情况:
所谓数据监控程序其实是两个程序,姑且称之为A程序、B程序吧。其中A程序就是前面所说的一双眼睛,盯着电脑上的一切动作。但这双眼睛,还只是螳螂的眼睛。它后面还有另一双眼睛----黄雀的眼睛,这另一双眼睛就是B程序。B程序做什么呢?它负责盯着A程序有没有在干活……如果A程序不干活,它就发短信告状,现在客户就是收到了B程序的告状短信,说A程序不干活了。当然,A、B这两双眼睛,是相互瞪着的,如果B偷懒了,A程序也会发短信告状。而且A、B程序还有一项特异功能,就是让对方满血复活。打个比方说,如果A程序被人干掉了,B程序立马就会将A程序原地满血复活—--重新启动,同时发条短信告诉主人:“A被人干掉了,还好有我春哥在,他又满血复活了”。
好吧,技术上的事,说起来总是挺复杂的,总之老韦说的意思就是:数据监控程序没有被人干掉,但是它也没在干活。就好像它小睡了7分钟,然后又接着起来干活了。这是一件很神奇的事情!
日志文件有50兆,还好老韦及时提供了具体的时间信息,朱恨很快定位到01:01分的日志,但是奇怪的是,从01:01分到01:09分,日志文件中一共就两个字:“懒人”。这两个字孤零零地占着一行,与上下行的日志格式也一不样,并不是以日志时间开头的。好吧,事情越来越离奇了,好像数据监控程序也知道自己偷懒7分钟一样,自我标榜为:“懒人”。
“01:01到01:09之间,日志文件中只有一条记录:懒人。”朱恨把这个发现发给了老韦。同时截了一张图过去。
“什么???”老韦发过来的信息似乎非常吃惊。紧接着朱恨的电话响了起来,证实了老韦确实很吃惊。
“什么!你说在日志文件中有这段时间有‘懒人’两个字?”老韦在电话中着急的问。
“是的,我也不知道为什么出现这种情况,但确实只有这两个字,而且这一行日志没有时间。”朱恨解释道。
“你准备一下,我们要马上赶到现场去!”老韦的声音越发急促起来。
这下轮到朱恨紧张了,“现在?这么晚?去现场?”
“是的,15分钟后,公司的车会到你楼下接你!”老韦说完又挂断了电话。
“什么情况嘛!”朱恨完全没反应过来,第一次出差,居然是三更半夜的,还是这么离奇的问题,朱恨心里有点发毛,一边嘀咕一边收拾电脑,“要不要带衣服也不说,要待几天也不知道,这个死老韦。”
15分钟后电话准时响起,“朱恨,公司车已经到你楼下,怎么还没下来?”
“不好意思,我收拾两件衣服,马上下来!”
“不用收拾衣服了,明天一早就回来,张工在现场等着!”老韦的话一向是这么简单直接,没办法,朱恨只好背起电脑包就走。
车上只有司机老黄和老韦两个人,朱恨一上车,老韦就说:“你在后排躺会吧,就我们三个了,G市过去H市大致1个半小时到现场。”说完他就靠着副驾的座椅闭目养神起来。甚至发出了轻微的鼾声。
太神奇了!前一秒还在说着话,后一秒就睡着了。朱恨心里想着,自己却怎么也睡不着,望着车窗外飞速倒退的路灯,朱恨感叹这半小时真的是太神奇了。
一路无话,当车停到东江通信的综合大楼下时,老韦立马神奇地醒了过来,“到了!走吧!”一边走一边拿出一张工牌给朱恨,朱恨注意看了一下,这并不是自己公司的工牌,老韦见他不戴上,回头解释了一下,说:“这是东江公司的维护厂商工牌,戴这个牌才能进到机房里。”果然,进到大堂就有经警来检查工牌,见他们两个戴的都是维护工牌才放行。
一踏进机房,就看到张工正站在一排机柜前忙碌着,老韦着急地将朱恨拉到张工身边,点着电脑屏幕上的一个文件问:“朱恨,你刚才看的是这个日志文件吧?”
“是的!”朱恨肯定地说。
“但是你看”张工将日志文件拉到最下边,“并没有‘懒人’这两个字!”。
朱恨吃了一惊,仔细看着屏幕上的日志,前一行是
【2005-05-20 01:01:27】收到心跳消息,回复正常
下一行却是
【2005-05-20 01:08:39】收到心跳消息,回复正常
中间那一条“懒人”没有了!!
“这不可能!”朱恨惊叫一声,手忙脚乱地打开自己的电脑。
这次的开机格外漫长,在张工、老韦两个人着急地注视下,朱恨感到手心一直在冒汗。
终于打开日志文件了,朱恨拉到文件最下边,赫然发现“懒人”个两个字依然夹在两行正常的日志中间!
三个人面面相觑,过了好一会儿,老韦才开口说:“看看这两个日志文件的时间。”
“1点10分33秒”朱恨说。
“3点15分42秒”张工说,然后又接着解释了一下“我打开的是服务器的日志,你那份是1点钟我传回去的。”
“那有没有可能日志文件在这段时间内被修改过呢?”朱恨小心的问道。
“你是说人工修改还是被程序修改呢?”张工反问。
“两个都有可能吧!”朱恨小声说。
“人工修改不可能,因为现场只有我一个人在这,没有第二个人打开过日志文件,而且,数据监控程序是一直在运行的,所以我打开的日志文件是只读的,根本修改不了。”张工语气非常肯定。
老韦点点头“那只有程序修改这一种可能性了,回头我们再检查一下源码,看看是哪里写出来的‘懒人’这两个字,还有什么情况下,日志文件中的记录会被删除。”
“我们的程序中不会写出‘懒人’这两个字的”朱恨肯定地说,代码我全部看过。
老韦和张工对视了一眼,然后张工说:“这也并非完全不可能,我们知道汉字是占两个字节的,有可能出现两个字节组合到一起意外变成了一个汉字的”。
朱恨心中有个模糊的念头一闪而过,正想开口,老韦挥了挥手,总结性的说:“这个问题我们回去再讨论,程序已经恢复正常了,现在最重要的是怎么写一份故障报告给到客户。”
“对了,故障报告中不要把‘懒人’这个日志信息的内容写进去,这件事就我们三个人知道,等查清楚了再说。”
朱恨不理解的问道:“那问题都没查到,怎么写故障报告呢?”
老韦看了他一眼,没理他,而是转向张工说:“查一下01:01到01:09这段时间内有没有什么后台进程在运行,比如磁盘备份,杀毒软件等,占用了大量资源,导致数据监控程序假死了。”
“嗯,我检查过数据库日备程序是在01:00分执行的,刚好是在故障这段时间内,而且备份的磁盘刚好是日志所在的D盘,如果备份程序将磁盘用到了100%,那么就会出现写不了日志文件的情况。”看来张工在这2小时内对服务器做了全面检查。
老韦若有所思地点点头,“那有没有检查过备份的文件和现在D盘的剩余空间大小是不是差不多呢?”
“是的,备份文件比现在的D盘空间大20M左右”张工回答。
“那基本上可以确定是这个原因了”,老韦又回头看了一眼朱恨,朱恨心里一动,那个模糊的念头又要冒出来,但很快老韦接着说了下去,“张工你就按这个思路写一份故障报告吧!”那个模糊的念头就云烟般消散了。
“你把磁盘剩余空间,备份文件大小,日志内容这些都截个屏,放到故障报告里去!”老韦又下了一条指示。
“好的,我都已经截好了!”
后来朱恨想了想,张工现场的分析确实是非常正确的,在那种条件下唯一正确的解释。翻译过来大概是这样:数据监控程序并非没有在干活,而是客观条件让它干不了活。打个比方说:你写日记写得正美呢,恰好日记本最后一页都被写完了;开车开得正爽呢,前面路被封了。7分钟后,新日记本买回来了,路通了,于是,日记又可以接着写了,车也可以继续开了。
张工的工作确实做得非常到位。在以后的几年里,张工一直是朱恨崇拜的偶像,他认真细致的做事方式对朱恨造成了深远的影响。当然,在更多年以后,朱恨才领会到,张工和老韦在现场所说的每一句话都是经过深思熟虑的。他更没想到的是,在更多更多年以后,“懒人”这两个字就像魔咒一样,贯穿了他的整个程序人生。