`

思考才能有效的解决问题----<WEB应用在捕捉异常并处理时,请不要使用System.exit(1)!!!! > 

    博客分类:
  • JAVA
阅读更多

思考才能有效的解决问题----<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)是在代码测试的时候某人无意的添加的,又或者是在其余种种情况下添加的,以至于它害得我二天多么的心神疲惫,这些都不重要了。重要的是经过这次事件后,发现我严重的缺乏独立思考的能力,过于依赖百度与谷歌。

  勤劳也许能把一件事情做完,但只有用心才能把一件事件做好啊!

 

 

 

 

分享到:
评论
3 楼 xiegqooo 2016-02-25  
fbb_11 写道
如果以前都正常,而突然不正常了,正常的思路应该是分析变化的部分。
根据时间排序,寻找最近修改的文件,逐个试才是正确的思路。


1、历史记录
2、向下排除
谢谢了 、
2 楼 fbb_11 2013-06-05  
如果以前都正常,而突然不正常了,正常的思路应该是分析变化的部分。
根据时间排序,寻找最近修改的文件,逐个试才是正确的思路。
1 楼 iamaj2eeprogrammer 2011-04-13  
兄弟,你写的太好了,学习了。
文章后部分
“重要的是经过这次事件后,发现我严重的缺乏独立思考的能力,过于依赖百度与谷歌。

  勤劳也许能把一件事情做完,但只有用心才能把一件事件做好啊!”
总结的蛮好的,通过一个工作中的真实实例,反思自身存在的不足。这才是你发现的最大的“问题”。
受教了。

相关推荐

    JAVA编程常用英文单词汇总.doc

    这是一种编程范式,强调的是将数据和处理这些数据的方法绑定在一起,并且能够通过继承和多态来扩展程序的功能。 #### Java开发环境 - **JDK**: Java Development Kit,Java开发工具包。这是进行Java开发的基础...

    Java基础常见英语词汇

    - **捕捉**(Catch):处理异常的代码块。 - **最后**(Finally):无论是否发生异常都会执行的代码块。 - **抛出**(Throw):手动抛出异常。 - **投掷**(Throws):声明可能抛出的异常。 - **可抛出的**...

    matlab常用指令大全

    - **`catch`**: 用于捕捉异常。 - **`continue`**: 跳过循环体中的剩余部分,继续下一次迭代。 - **`else`**: 用于 `if` 结构中的条件判断。 - **`elseif`**: 用于 `if` 结构中的多重条件判断。 - **`end`**: 结束...

    python标准库

    signal模块提供了信号处理的功能,可用于捕捉外部信号并执行相应的处理函数。 ### 四、数据表示 #### 4.1 array模块 array模块提供了数组支持,相比于list,它可以存储单一类型的元素,并且在某些情况下性能更好。...

Global site tag (gtag.js) - Google Analytics