问题描述
锁住的进程时间是16:10分左右,tomcat错误报告里边只有这个 是这个时间段的.基本上就判断是这个.但是有些看不懂,是哪里出了问题。。“/pagenotfound.html”是我定义的一个404错误跳转页面。2011-11-18 16:12:20 org.apache.catalina.core.StandardHostValve@7038b9: Exception Processing ErrorPage[errorCode=404, location=/pagenotfound.html]ClientAbortException: java.net.SocketException: Connection reset by peer: socket write errorat org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:331)at org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:297)at org.apache.coyote.tomcat5.CoyoteResponse.flushBuffer(CoyoteResponse.java:537)at org.apache.coyote.tomcat5.CoyoteResponseFacade.flushBuffer(CoyoteResponseFacade.java:238)at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:303)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:147)at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)at java.lang.Thread.run(Unknown Source) 问题补充:283433775 写道
解决方案
这么说问题就很明显了,conn是必须关闭的,不管你是在什么地方,try里面还是在finally里面必须要有的,如果是连接池,也要放回连接池啊,有的连接池有机制,有时间片的限制,就是有future的特性,如果在一定时间长度还没用完就会收回,不知道你的是什么情况,还有就是有的时候,如果你不是连接池,conn因为方法异常没执行完,但是这个conn没有释放,因为你的session还在或者是里面的statment还在,或者rs还在用,导致还是有引用指向conn,这样这个对象的引用数不是0,这样在jvm进行GC的时候,不会对内存的回收,这个对象一直占用连接,导致不会释放连接。
解决方案二:
conn显然要关闭。至少要放回池里。不调用关闭,如何放回池里?ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error 客户端请示非正常关闭?比如只是post一部分数据突然强行关闭?
解决方案三:
非正常执行连接没断,锁没有释放吧,然后就锁住了。
解决方案四:
检查你的代码,是不是数据库没有执行完,提前关闭数据库连接了。