The last packet sent successfully to the server was 0 milliseconds ago.

jdbc:mysql://localhost:3306?user=root&password=qwe123&characterEncoding=utf8
十二月 09, 2014 2:47:43 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [setupServlet] in context with path [] threw exception
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
<span style="white-space:pre">	</span>at com.jspxcms.core.setup.SetupServlet.doPost(SetupServlet.java:83)
<span style="white-space:pre">	</span>at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
<span style="white-space:pre">	</span>at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
<span style="white-space:pre">	</span>at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
<span style="white-space:pre">	</span>at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
<span style="white-space:pre">	</span>at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
<span style="white-space:pre">	</span>at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
<span style="white-space:pre">	</span>at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
<span style="white-space:pre">	</span>at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
<span style="white-space:pre">	</span>at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
<span style="white-space:pre">	</span>at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
<span style="white-space:pre">	</span>at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
<span style="white-space:pre">	</span>at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
<span style="white-space:pre">	</span>at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
<span style="white-space:pre">	</span>at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
<span style="white-space:pre">	</span>at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
<span style="white-space:pre">	</span>at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
<span style="white-space:pre">	</span>at java.lang.Thread.run(Thread.java:744)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
<span style="white-space:pre">	</span>at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
<span style="white-space:pre">	</span>at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
<span style="white-space:pre">	</span>at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
<span style="white-space:pre">	</span>at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
<span style="white-space:pre">	</span>at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
<span style="white-space:pre">	</span>at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
<span style="white-space:pre">	</span>at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350)
<span style="white-space:pre">	</span>at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408)
<span style="white-space:pre">	</span>at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
<span style="white-space:pre">	</span>at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
<span style="white-space:pre">	</span>at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
<span style="white-space:pre">	</span>at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
<span style="white-space:pre">	</span>at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
<span style="white-space:pre">	</span>at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
<span style="white-space:pre">	</span>at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
<span style="white-space:pre">	</span>at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
<span style="white-space:pre">	</span>at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
<span style="white-space:pre">	</span>at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
<span style="white-space:pre">	</span>at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
<span style="white-space:pre">	</span>at java.sql.DriverManager.getConnection(DriverManager.java:571)
<span style="white-space:pre">	</span>at java.sql.DriverManager.getConnection(DriverManager.java:233)
<span style="white-space:pre">	</span>at com.jspxcms.core.setup.SetupServlet.createDatabase(SetupServlet.java:151)
<span style="white-space:pre">	</span>at com.jspxcms.core.setup.SetupServlet.database(SetupServlet.java:126)
<span style="white-space:pre">	</span>at com.jspxcms.core.setup.SetupServlet.doPost(SetupServlet.java:75)
<span style="white-space:pre">	</span>... 17 more
Caused by: java.net.ConnectException: Connection refused: connect
<span style="white-space:pre">	</span>at java.net.DualStackPlainSocketImpl.connect0(Native Method)
<span style="white-space:pre">	</span>at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
<span style="white-space:pre">	</span>at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
<span style="white-space:pre">	</span>at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
<span style="white-space:pre">	</span>at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
<span style="white-space:pre">	</span>at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
<span style="white-space:pre">	</span>at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
<span style="white-space:pre">	</span>at java.net.Socket.connect(Socket.java:579)
<span style="white-space:pre">	</span>at java.net.Socket.connect(Socket.java:528)
<span style="white-space:pre">	</span>at java.net.Socket.<init>(Socket.java:425)
<span style="white-space:pre">	</span>at java.net.Socket.<init>(Socket.java:241)
<span style="white-space:pre">	</span>at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259)
<span style="white-space:pre">	</span>at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
<span style="white-space:pre">	</span>... 34 more

原因分析: 
(1)大量数据访问情况下,mysql connection连接有可能失效 
(2)长时间不访问,connection会失效 


MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

解决方案

1.第一种解决办法,修改MySQL的参数,wait_timeout最大为31536000即1年,编辑mysql目录里的:my.cnf(windows下为my.ini)里加上

wait_timeout=31536000

interactive_timeout=31536000

重启生效,需要同时修改这两个参数,重新设置Mysql的wait-timeout参数值 不是一个好方法不建议使用

 2. 第二种解决办法,可以通过配置,让缓冲池去测试连接是否被回收,如果被回收,则不继续使用,以dbcp为例:

          #SQL查询,用来验证从连接池取出的连接
          dbcp.validationQuery=SELECT 1
          #指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除
          dbcp.testWhileIdle=true
          #在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小
          dbcp.timeBetweenEvictionRunsMillis=300000
          #在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好和maxActive一致
         dbcp.numTestsPerEvictionRun=50
          #连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位
          dbcp.minEvictableIdleTimeMillis=3600000






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值