思考才能有效的解决问题----<WEB应用在捕捉异常并处理时,请不要使用System.exit(1)!!!! >
为了将此事铭记,我不得不痛苦的与事件相关的整个过程慢慢将回忆起来:
2010年10月7日上午,突然接到客户反映,说客户的某服务器上多个JSP网站无法打开,管理员报告说Tomcat WEB服务器停止了服务,且无法再次打开服务。
火速赶往检查。发现无论如何都打不开tomcat服务,惊奇之中心情忐忑。怪事~~~
带着疑惑,我手动打开tomcat 目录下的bin/startup.bat ,当见到稍显可爱的tomcat 打印黑板时,心中顿觉一松。然而不到三秒,在CMD运行窗口打印完tomcat服务启动相关的一些信息后竟从我眼前神秘消失!当下愕然!再次startup.bat,瞧见打印信息中唯一一句也是最后一句打印报告: [Fatal Error]:-1 -1 Premature end of file。
心中奇怪,“果断”的将log4j日志等级调高至DEBUG ,然后心中满怀期待的再次startup 。可惜,打印信息只出现一句 DEBUG: log4j initiated... 然后tomcat运行窗口再次神秘消失。最后一句依然是: [Fatal Error]:-1 -1 Premature end of file。
擦~~顿觉冒汗。已经无故障运行了半年的应用此时为何突然出现故障?而且如此神奇,诡异!究竟是什么问题呢?
介绍一下该服务器的混乱环境。
由于是大型企业服务器,上面运行着该企业数量众多的网站应用。从ASP到.net,再到PHP,然后是JSP。数据库也是种类繁多,从sqlserver 到 mysql ,甚至于oracle也有安装,综合来说是一个无序而管理混乱的服务器,加上里面的网站应用编写者水平层次不一,导致木马时有发生,简直就像一个混乱沼泽。
该服务器上的JSP容器采用的是tomcat,tomcat版本一直使用着tomcat6.18,而里面的多个应用有单纯的JSP&SERVLET,也有SSH1,还有SSH2。而这些网站数量加起来不下十数个。
心情忐忑,直奔百度和谷歌。网上他人的记录,有web.xml 配置错误,到SSH包冲突,再到java环境变量配置错误,重装tomcat,重装JAVA,再到种种说不清的异常,每一个都让我惊疑不定。只能硬着头皮,按着线索一个个检查。然而由于完该tomcat 容器下面的应用众多,所耗时间之巨真是令人抓狂!
一个个错误的猜测,一个个的方案尝试,长达漫长的二天!这二天,可谓是绞尽脑汁,一个个测试都以期待开始,而最终却都以失败告终。二天之后仍无头绪!而客户在不停摧促!心中压力逾来逾重!
二天后的今天,在经历极其痛苦的折磨之后,极其疲惫的我想了个办法,将应用逐个分离,然后测试,最终找到了罪魁祸首,某XXX应用。只要有该XXX应用存在,tomcat必不能启动!!至此心中总算松了一口气!
强打起精神单独测试该应用的源代码,最后最终发现了万恶之源呀,在几万行代码中的一句与xml有关的短短的
System.exit(1) 藏在某XML文件异常捕捉处理中。汗~~
当发现它时,我的痛苦之情到了无以复加的地步!看着它只觉得这行代码极其罪恶!万恶的System.exit(1) ,你害得我好苦啊!
总结:不管,这句System.exit(1)是在代码测试的时候某人无意的添加的,又或者是在其余种种情况下添加的,以至于它害得我二天多么的心神疲惫,这些都不重要了。重要的是经过这次事件后,发现我严重的缺乏独立思考的能力,过于依赖百度与谷歌。
勤劳也许能把一件事情做完,但只有用心才能把一件事件做好啊!