情况是:星期六,同时打我电话,说平台动不了,让我解决一下,当时我正好在外面出差,来不及帮他们解决。
这个问题一直延续到星期一早上,服务器提供的服务瘫痪了!
把整个服务器翻了遍也没查出问题的所在。tomcat好好,怎么就会怎么瘫痪了!?
进过了四五个小时的苦战,终于发现问题的所在:
- 服务项目中远程链接的数据库连不上了?连不上也会造成服务挂掉?这个我之前一直没有碰到过中情况,
这次算是领教了,下面我就和大家详细的解释一下:
tomcat在链接不上后,只报一个connect failed,一个报了一下错误:
1.java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
2.ERROR: All threads (150) are currently busy, waiting. Increase maxThreads (999) or check the servlet status
3.WARN ContainerBackgroundProcessor[StandardEngine[Catalina]] org.apache.catalina.core.ContainerBase - Exception processing manager org.apache.catalina.session
.StandardManager@6ebdb4 background process
java.lang.IllegalStateException: getAttribute: Session already invalidated
通过这样的日志信息,我应该顺藤摸瓜 ,可是一开始没有这么去做,而是一个一个去查原因,最终耽误了很多时间,warn
错误根本和这次的问题毫无关系,我还花了时间去分析它,实属不该。第二个error,这个是比较严重的问题,也是导致结
果性的问题。通过分析和google,得出他上面还有一层错误导致他的出现。那么是那个了?其实不用想也知道是第一个
了。也是我一开始就发现的问题,我居然没有清晰过来。问题的所在就在无法链接数据库的代码上,如果我添加的close,
现在的情况及大大的不一样了,就这么小小的一行代码给变我们。还有一个必然的原因:耦合。我们系统为什么要去依赖远
程数据库了,这就造成了耦合的问题。这是发生也是必然的。
从这件事情上,我真正体会到,你写的东西后将来发生事情有着紧密的联系,永远是耦合的,无法分割的。
之前,听人说过,程序可以让世界变的美好,也可以让你瘫痪。
我们永远和之后发生的事情是耦合的,但是我们可以让我们的系统避免耦合。
这里,和大家分享一下:提供代码严谨度和减少耦合