SQLException: Communication link failure: java.net.SocketException, underlying cause: Socket closed ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Socket closed STACKTRACE: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1392) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1539) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1930) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1168) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1279) at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1225) at com.mysql.jdbc.Connection.execSQL(Connection.java:2278) at com.mysql.jdbc.Connection.execSQL(Connection.java:2225) at com.mysql.jdbc.Statement.executeQuery(Statement.java:1163) at db.DbManager.ExecQuery(DbManager.java:82) at mng.PackageMng.getCurrentPackageAuction_total(PackageMng.java:88) at web.action.auction.PackageAction.showPackage(PackageAction.java:159) at sun.reflect.GeneratedMethodAccessor6696.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:364) at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:216) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188) at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113) at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:225) at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:517) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619) ** END NESTED EXCEPTION **

解决方案 »

  1.   

    MySQL超时问题
      一个都起灰尘的项目,最近出现一个问题。描述如下:当天使用很正常,到了第二天就不能登录使用,具体的说不能访问数据库。重启“小猫”之后,能正常使用,但到第二天又不行啦。根据日志分析,是MySQL数据库连接关闭了。
    “java.sql.SQLException
    MESSAGE: Communication link failure: java.net.SocketException, underlying cause: Software caused connection abort: recv failed”.  上网查了些帖子,发现可能是MySQL5.0版本的一个bug:超时问题。MySQL默认等待时间间隔wait_timeout是8小时,也就是8小时内,我们的系统没有使用,没有对数据库进行访问的话,数据库会关闭连接,而当我们系统用这些连接对数据库进行访问时,就会出现上述问题。
      解决办法有2种:
    1. 对于MySQL5之前的版本,如Mysql4.x,只需要修改连接池配置中的URL,添加一个参数:autoReconnect=true,如果是MySQL5及以后的版本,则需要修改my.ini文件。在[mysqld]后面添加上: wait_timeout=1814400,把默认的8小时尽量延长。
    2. 采用第三方的数据库连接池来管理连接, 如,proxool、C3P0等。性能方面据说proxool更强些。由于该系统用了hibernate,对C3P0支持比较好,C3P0.jar包无需另外下载。C3P0和hibernate的配置也相对简单,如下,
      先把C3P0.jar包拷贝到WEB-INF\lib下,然后修改hibernate.cfg.xml文件,加入以下内容:
    <!--C3P0 setting-->
      <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
      <property name="hibernate.c3p0.min_size">2</property>
      <property name="hibernate.c3p0.timeout">5000</property>
      <property name="hibernate.c3p0.max_statements">100</property>
      <property name="hibernate.c3p0.idle_test_period">3000</property>
      <property name="hibernate.c3p0.acquire_increment">2</property>
      <property name="hibernate.c3p0.validate">false</property>
      这样基本可以解决MySQL的超时问题,如何检查该方法是否有效呢?可以通过修改服务器的系统日期,把日期往前推几个月,然后再访问系统,看是否还报错。
      

  2.   

    http://blog.163.com/s_u/blog/static/133083672009413114020821/百度之