解决
目前我多数是选在周一早上更新系统,然后就到总部开周会。不过似乎近来形成了一个传统,明明运行得好好的东西,一旦我升级完毕开始打算舒心开会时,它就会出问题罢工,直到给急call,尽管系统总是已经经过一定强度的测试了——当然,不是每次都进行过重力测试。升级也实在太频繁了,不可能每次测试完全。上一次是升级了两个小时后开始变慢,经过压力测试和debug后,去除了不算太肯定的一些代码,反正似乎是经受住了严格十倍的测试了,花了我一个星期的工作时间。这一次呢,无非是在外围进行了URL重写,基本上没有处理过tomcat的程序,但在半夜发布后两个小时tomcat就当了机。可是在白天负载要重几十倍地运行了一天,却屁事没有;这可以天知道是什么原因了。 晚上仔细看记录日志,发现当机的原因,应该是由于tomcat在运行时出现out of memory异常,而造成这个异常的原因,估计是由于两个错误反复出现:一个是由于删除了一个被常include的jsp造成的登录界面运行异常(意味着一整天没有人登录过),二是一个同事使用老式的jsp/param方式时没有进行详细的异常判断,反复输出数据类型错误;反正大概是由于反常出现错误导致垃圾来不及清除,最后异常退出了。不过,这个解释也是非常牵强的,因为白天的压力重得多,干吗就不垮呢? 无论如何,还是把jvm的处理内存堆栈打大一点吧。 参考文章http://java.sun.com/docs/hotspot/gc1.4.2/#3.1.%20Total%20Heap|outline,加上把两个错误清除,大概不会再出现同样的情况了。
全文: http://zwwwxy.blogchina.com/blog/article_81038.1378434.html