第一种报错:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 10720 ms ago. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3009) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2895) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3438) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1605) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1524) at com.alibaba.druid.pool.DruidPooledStatement.executeUpdate(DruidPooledStatement.java:169) at com.liantuo.syncpolicy.schedule.InsertPrDynamicValidMain.inertIntoTable(InsertPrDynamicValidMain.java:300) at com.liantuo.syncpolicy.schedule.InsertPrDynamicValidMain.syncPrDynamicValid(InsertPrDynamicValidMain.java:192) at com.liantuo.syncpolicy.schedule.InsertPrDynamicValidMain.main(InsertPrDynamicValidMain.java:88) Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2455) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2906) ... 11 more
第二种报错:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was48423 milliseconds ago.The last packet sent successfully to the server was 48423 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3270) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1932) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2477) at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1422) at com.alibaba.druid.pool.DruidPooledStatement.executeQuery(DruidPooledStatement.java:143) at com.liantuo.syncpolicy.schedule.InsertPrDynamicSpecialValidMain.syncPrDynamicValid(InsertPrDynamicSpecialValidMain.java:178) at com.liantuo.syncpolicy.schedule.InsertPrDynamicSpecialValidMain.main(InsertPrDynamicSpecialValidMain.java:123) Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at
最近定时任务总是报错,重启就没有这个问题了,开始以为是数据库的wait_timeout太短了,或者我是的sql执行太慢了。
后来发现上面的报错超过10个后就改成了
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 20000, active 10
因为我的数据源配置的就是10个链接,所以开始考虑是不是链接太少了,后来其他人的定时任务也是用同一个数据源,链接明显不够,后来把链接最大值改成了200就好了。当然我也对sql进行了优化,不过我觉得不是sql的问题,因为之前跑着都没事。