从去年12月一直忙碌到现在,项目终于进入交付阶段了,感觉可以轻松几天了。下午跟项目上的工程师QQ聊天,得到更好的消息,一个折腾一年多的项目终于不再出问题了。(此文纯属流水帐)
去年四月,第一次出差去现场,之所以去现场是由于项目定制开发太紧急,我们在交付的前一天才开发完的。这一去,前前后后就折腾了我足足一年。
去现场安装部署,总共就部署两东西,一个客户端,一个消息分发服务。安装部署之后发现消息一会通一会不通,每次通信不畅时都能ping得通,这问题一直到第二天才发现,现场两台机器竟然是一个ip地址,现场配的ip有好几个都是重复的(门禁终端的ip跟电脑的ip相同,一点都看不出两个设备一直在抢ip),这种事想想都恶心。第二个问题就是刚装的系统,登录帐户竟然设不了管理员权限,现场工程师还信誓旦旦的说是装的正版的系统,怎么看都不像,后来我说系统不行,让他们重装系统他们才说是随便买的光盘装的系统。他们又重装了下系统,但总感觉跟我们平时看到的系统有点不一样。装了一运行,发现有问题,跟负责写消息分发的同事一沟通,然后他在办公室测试了下说局域网不行,在办公室都只用的本机测试,瞬间奔溃,现场陷于停顿。于是看代码,发现很乱,在现场也没啥心思写(现场五个人看着你写代码,两个业主一个销售一个现场工程师一个技术支持),直到下班同事也没找到解决方案,于是回酒店写,另起炉灶一直写到凌晨四点多才本机测试完(很庆幸自己对消息分发还有点研究,否则真不知道第二天该怎么交代)。就这样勉勉强强的交付了。
没想到,没过几天,现场说程序经常不能正常运行了,让他们把日志给我,看日志应该是网络断了,他们说网络是好的,能ping通,我就检查为什么会断,难道是那天熬夜写的消息分发有bug,于是反复检查代码一次次测试,不能重现,添加了一些注释后,发现消息中断时根本ping不通,于是跟业主沟通,终于发现问题,他们网线的水晶头有点松,有震动时就会断网,把所有的网线水晶头换了之后就都ok了,坑。
这样安稳的过了一个月,忽然有一天,现场又报,客户端不管点击什么都会报错,消息分发服务也不运行了,于是远程看了下,不看不知道,一看吓一跳,电脑中病毒了,服务器上竟然多了两个用户,数据库也多了几个帐户。于是让他们杀毒改密码,计算机和数据库密码改了个超复杂的(他们原来设的是123456),杀了100多个木马。杀完之后软件当时没报错,服务也运行的好好的。
松了口气,不是程序的问题,其实这才是开始。仅仅过了一天,客户端软件又不行了。根据报错,我发现昨天有系统Dll被杀毒软件误删了,于是我让他们重装系统。他们不从,说服务器上装了其他东西不想重装,于是又修复Dll,好了一阵,以后的日子,时常报缺失某个关键Dll,将其修复基本都可以。然而消息服务就没那么幸运了,第二天一大早就报消息服务不通畅,修复DLL还是不行,但重启之后就好了,于是乎我又开始挑那段消息分发的毛病,一直没发现有什么异样。接下来观察了几天的报错发现每天7点左右消息服务就断,重启电脑之后就ok(后期发现重启我们的服务就ok了)。有规律总是一个很兴奋的事,于是我想要么是服务器上有什么定期在执行,要么就是资源未释放,或是连接数或是内存。不过根据调查,现场的并发量还没有在办公室里模拟的多,办公室始终不能重现,现场的内存什么的也正常。因为重启服务就可以了,所以我始终相信是我们程序的问题。这样持续了近一个月,还是不能解决,也犯迷糊了,后来干脆写了个服务,每天6点把消息分发服务重启下,这样就ok了。
这样过了好几个月,9月又有问题了,消息分发不正常的时间开始扩散,晚上和凌晨都会时有中断,这次参考上次的经验,找个四个相对比较空闲的时间自动重启服务,问题解决,几天没有重现。但本着解决问题的决心,我私自让现场协助我一个月(天天任其报错而不自动重启服务),我找找规律,那段时间几乎都是我下班之后才做的,现场天天重现错误然后把日志发给我。前后写了三个版本都不行,那段时间百思不得其解,最后还是放弃了,感觉很有受挫感。又恢复了自动定时重启服务的版本。
如此过了半年,到今年3月份,也就是维保还有一个月时,客户端怎么修复DLL都不行,一直报错,但又要用其基本功能,于是我给了他个标准版(现场原来是用的定制版),发现还不行,我就发飙了,我说只能重装系统,我们的标准版都推了好几年了,几十个项目都在用,系统从xp到server2012都有,别人都正常就只有你们的不正常。在我的强硬态度下,他们很不情愿的重装了系统(过了维保,出了问题再想找我们就得先谈钱了),重装之后我又让他们装一年前的初始版本,一切正常,直到今天下午他说都没有出过问题。对于此,我只想说脏话,虽然解决了,但走了很多冤枉路。后来想想,要么是另一个软件上装了什么导致消息一直不畅,要么是病毒破坏了消息分发所依赖的某个系统关键DLL导致的(因为消息通信的报错好多只是简单的报连不上的错)。
一切都是流水帐,庆祝大家顺利从该项目中解脱~
这是我第一次出差去现场安装部署,还是可以学到很多的,现场真的是什么情况都可能发生。从那次以后,我们都跟现场工程师说,系统密码和数据库密码一定要强命名。以后还得再加上,如果现场电脑中毒了,如果可以重装就不要嫌麻烦,重装系统吧。
对于我们开发者,项目再急也要让测试的人去测测,开发的人测试总有纰漏。最后附上中毒的图~