各位大虾,我在做的一个项目使用SSH框架,项目在运行过程中,不定期的发现数据访问异常。在tomcat的日志文件中发现大量的异常,归总为两类:Broken   pipe和Connection   reset如下: ===============================   第一种=================== 
2008-01-17   08:31:56,142-[ERROR][JDBCExceptionReporter]-[Microsoft][SQLServer   2000   Driver   for   JDBC]Broken   pipe 
2008-01-17   08:31:56,142-[ERROR][StandardWrapperValve]-Servlet.service()   for   servlet   action   threw   exception 
org.springframework.jdbc.UncategorizedSQLException:   Hibernate   operation:   could   not   execute   query;   uncategorized   SQLException   for   SQL   [select   wzyhb0_.id   as   id,   wzyhb0_.lx   as   lx58_,   wzyhb0_.jb   as   jb58_,   wzyhb0_.zh   as   zh58_,   wzyhb0_.mc   as   mc58_,   wzyhb0_.mm   as   mm58_,   wzyhb0_.xb   as   xb58_,   wzyhb0_.qx   as   qx58_,   wzyhb0_.glzh   as   glzh58_,   wzyhb0_.bm   as   bm58_,   wzyhb0_.qqhm   as   qqhm58_,   wzyhb0_.jdr   as   jdr58_,   wzyhb0_.jdsj   as   jdsj58_,   wzyhb0_.sm   as   sm58_,   wzyhb0_.bz   as   bz58_,   wzyhb0_.townno   as   townno58_,   wzyhb0_.yljgbh   as   yljgbh58_,   wzyhb0_.yljgjb   as   yljgjb58_   from   hzylxiaolan.dbo.wzyhb   wzyhb0_   where   1=1   and   wzyhb0_.zh='l10899'   and   wzyhb0_.mm='F54A8929510BE6FDC37CA5D669C13170'];   SQL   state   [08S01];   error   code   [0];   [Microsoft][SQLServer   2000   Driver   for   JDBC]Broken   pipe;   nested   exception   is   java.sql.SQLException:   [Microsoft][SQLServer   2000   Driver   for   JDBC]Broken   pipe 
java.sql.SQLException:   [Microsoft][SQLServer   2000   Driver   for   JDBC]Broken   pipe 
at   com.microsoft.jdbc.base.BaseExceptions.createException(Unknown   Source) 
at   com.microsoft.jdbc.base.BaseExceptions.getException(Unknown   Source) 
at   com.microsoft.jdbc.base.BaseExceptions.getException(Unknown   Source) 
at   com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.submitRequest(Unknown   Source) 
at   com.microsoft.jdbc.sqlserver.SQLServerImplStatement.execute(Unknown   Source) 
at   com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown   Source) 
at   com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown   Source) 
at   com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown   Source) 
at   com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) 
at   org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120) 
at   org.hibernate.loader.Loader.getResultSet(Loader.java:1272) 
at   org.hibernate.loader.Loader.doQuery(Loader.java:391) 
at   org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218) 
at   org.hibernate.loader.Loader.doList(Loader.java:1593) 
at   org.hibernate.loader.Loader.list(Loader.java:1577) 
at   org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395) 
at   org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271) 
at   org.hibernate.impl.SessionImpl.list(SessionImpl.java:844) 
at   org.hibernate.impl.QueryImpl.list(QueryImpl.java:74) 
at   org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:826) 
at   org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:365) 
at   org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:817) 
at   org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:809) 
at   extDao.ExtWzyhbDAO.checkWzyhInfo(ExtWzyhbDAO.java:120) 
at   myclass.wzyhb.WzyhbLoad.checkWzyhInfo(WzyhbLoad.java:33) 
at   struts.action.CheckLogonAction.execute(CheckLogonAction.java:58) 
at   org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106) 
at   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) 
at   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) 
at   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) 
at   org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 
at   javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
at   javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
at   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
at   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
at   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
at   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
at   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
at   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
at   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
at   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868) 
at   org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663) 
at   org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
at   org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
at   org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
at   java.lang.Thread.run(Thread.java:595) 

解决方案 »

  1.   

    ===============================   第二种=================== 
    2008-01-17   08:31:59,456-[ERROR][JDBCExceptionReporter]-[Microsoft][SQLServer   2000   Driver   for   JDBC]Connection   reset 
    2008-01-17   08:31:59,457-[ERROR][StandardWrapperValve]-Servlet.service()   for   servlet   action   threw   exception 
    org.springframework.jdbc.UncategorizedSQLException:   Hibernate   operation:   could   not   execute   query;   uncategorized   SQLException   for   SQL   [select   wzyhb0_.id   as   id,   wzyhb0_.lx   as   lx58_,   wzyhb0_.jb   as   jb58_,   wzyhb0_.zh   as   zh58_,   wzyhb0_.mc   as   mc58_,   wzyhb0_.mm   as   mm58_,   wzyhb0_.xb   as   xb58_,   wzyhb0_.qx   as   qx58_,   wzyhb0_.glzh   as   glzh58_,   wzyhb0_.bm   as   bm58_,   wzyhb0_.qqhm   as   qqhm58_,   wzyhb0_.jdr   as   jdr58_,   wzyhb0_.jdsj   as   jdsj58_,   wzyhb0_.sm   as   sm58_,   wzyhb0_.bz   as   bz58_,   wzyhb0_.townno   as   townno58_,   wzyhb0_.yljgbh   as   yljgbh58_,   wzyhb0_.yljgjb   as   yljgjb58_   from   hzylxiaolan.dbo.wzyhb   wzyhb0_   where   1=1   and   wzyhb0_.zh='l10899'   and   wzyhb0_.mm='F54A8929510BE6FDC37CA5D669C13170'];   SQL   state   [08S01];   error   code   [0];   [Microsoft][SQLServer   2000   Driver   for   JDBC]Connection   reset;   nested   exception   is   java.sql.SQLException:   [Microsoft][SQLServer   2000   Driver   for   JDBC]Connection   reset 
    java.sql.SQLException:   [Microsoft][SQLServer   2000   Driver   for   JDBC]Connection   reset 
    at   com.microsoft.jdbc.base.BaseExceptions.createException(Unknown   Source) 
    at   com.microsoft.jdbc.base.BaseExceptions.getException(Unknown   Source) 
    at   com.microsoft.jdbc.base.BaseExceptions.getException(Unknown   Source) 
    at   com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown   Source) 
    at   com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown   Source) 
    at   com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown   Source) 
    at   com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown   Source) 
    at   com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown   Source) 
    at   com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown   Source) 
    at   com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown   Source) 
    at   com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown   Source) 
    at   com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) 
    at   org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120) 
    at   org.hibernate.loader.Loader.getResultSet(Loader.java:1272) 
    at   org.hibernate.loader.Loader.doQuery(Loader.java:391) 
    at   org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218) 
    at   org.hibernate.loader.Loader.doList(Loader.java:1593) 
    at   org.hibernate.loader.Loader.list(Loader.java:1577) 
    at   org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395) 
    at   org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271) 
    at   org.hibernate.impl.SessionImpl.list(SessionImpl.java:844) 
    at   org.hibernate.impl.QueryImpl.list(QueryImpl.java:74) 
    at   org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:826) 
    at   org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:365) 
    at   org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:817) 
    at   org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:809) 
    at   extDao.ExtWzyhbDAO.checkWzyhInfo(ExtWzyhbDAO.java:120) 
    at   myclass.wzyhb.WzyhbLoad.checkWzyhInfo(WzyhbLoad.java:33) 
    at   struts.action.CheckLogonAction.execute(CheckLogonAction.java:58) 
    at   org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106) 
    at   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) 
    at   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) 
    at   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) 
    at   org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 
    at   javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
    at   javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
    at   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
    at   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
    at   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
    at   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
    at   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
    at   org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199) 
    at   org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282) 
    at   org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:744) 
    at   org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:674) 
    at   org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:866) 
    at   org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
    at   java.lang.Thread.run(Thread.java:595)
      

  2.   

    在网上寻找过相关资料,有的说是由于并发而造成的。但本项目并发的访问不大,因为用户数最多不超过20。下面是spring的配置文件: <bean   id="xxxx" 
    class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    <property   name="driverClass"> 
    <value> com.microsoft.jdbc.sqlserver.SQLServerDriver </value> 
    </property> 
    <property   name="jdbcUrl"> 
    <value> jdbc:microsoft:sqlserver://192.168.1.xxx:1433;DatabaseName=xxxx </value> 
    </property> 
    <property   name="user"> 
    <value> sa </value> 
    </property> 
    <property   name="password"> 
    <value> xxxxxx </value> 
    </property> 
    <property   name="minPoolSize"> 
    <value> 15 </value> 
    </property> 
    <property   name="acquireIncrement"> 
    <value> 5 </value> 
    </property> 
    <property   name="maxPoolSize"> 
    <value> 300 </value> 
    </property> 
    </bean> 有的资料说要增大tomcat的线程数,以下是tomcat的配置文件:         <Connector   port="8080"   maxHttpHeaderSize="8192" 
                                  maxThreads="300"   minSpareThreads="25"   maxSpareThreads="100" 
                                  enableLookups="false"   redirectPort="8443"   acceptCount="100" 
                                  connectionTimeout="30000"   disableUploadTimeout="true"   /> 还有的资料说在linux的环境配置文件/etc/profile中加入_JAVA_SR_SIGNUM=12就可以解决问题,但通过上面的配置,问题依然存在。 现在只能当访问出现问题时重启tomcat来解决,但几乎每天都要重启,请各位大虾指教。 
      

  3.   

    看错误应该是并发问题
    1 你的Connection 是不是声明为static 了
    2 你的负责创建Connection 的类是不是使用static总之,就是一个Connection 被重复使用了。
    第一个还没用完,第二个就close()了。查找你的获得Connection的代码吧!
      

  4.   

    1,Broken pipe :打破管道,应该是流没写完或没回复就被关闭了
    2,Connection reset :连接重置,应该是网络问题或者一个Connection被多线程用引起的
      

  5.   

    经过大胆求证,发现原来是由于数据库服务器在晚上进行自动备份造成连接中断的。请问tomcat是否能设置自动重新连接呢?