c3p0 com.mysql.jdbc.CommunicationsException异常

http://www.javaeye.com/topic/163265

 

 

Java代码 复制代码
  1. 2008-02-18 10:52:53 ERROR Thread-4 com.feedsky.dao.AbstractMutiDbDAO - com.mysql.jdbc.CommunicationsException: Communications    
  2.   
  3. link failure due to underlying exception:    
  4.   
  5. ** BEGIN NESTED EXCEPTION **    
  6.   
  7. java.io.EOFException   
  8.   
  9. STACKTRACE:   
  10.   
  11. java.io.EOFException   
  12.         at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)   
  13.         at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)   
  14.         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)   
  15.         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)   
  16.         at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)   
  17.         at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)   
  18.         at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)   
  19.         at com.mysql.jdbc.Statement.executeQuery(Statement.java:1169)   
  20.         at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)   
  21.         at com.feedsky.dao.AbstractMutiDbDAO.findBySQL(AbstractMutiDbDAO.java:34)   
  22.         at com.feedsky.dao.impl.SrcItemDAOImpl.findBySQL(SrcItemDAOImpl.java:326)   
  23.         at com.feedsky.dao.impl.SrcItemDAOImpl.loadByItemUuid(SrcItemDAOImpl.java:255)   
  24.         at com.feedsky.service.impl.SrcItemServiceImpl.loadByItemUuid(SrcItemServiceImpl.java:37)   
  25.         at com.feedsky.controller.SrcFeedController.saveSrcFeed(SrcFeedController.java:97)   
  26.         at com.feedsky.work.SrcStoreThread.saveSrcFeed(SrcStoreThread.java:174)   
  27.         at com.feedsky.work.SrcStoreThread.run(SrcStoreThread.java:53)   
  28.         at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:748)   
  29.         at java.lang.Thread.run(Thread.java:619)   
  30.   
  31.   
  32. ** END NESTED EXCEPTION **   
  33.   
  34.   
  35.   
  36. Last packet sent to the server was 176 ms ago.   
  37. 2008-02-18 10:52:53 ERROR Thread-4 com.feedsky.work.SrcStoreThread - java.lang.NullPointerException   
  38. 2008-02-18 10:52:53 INFO Thread-2 com.feedsky.dao.impl.SrcItemDAOImpl - com.mysql.jdbc.CommunicationsException:    
  39.   
  40. Communications link failure due to underlying exception:    
  41.   
  42. ** BEGIN NESTED EXCEPTION **    
  43.   
  44. java.io.EOFException   
  45.   
  46. STACKTRACE:   
  47.   
  48. java.io.EOFException   
  49.         at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)   
  50.         at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)   
  51.         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)   
  52.         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)   
  53.         at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)   
  54.         at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)   
  55.         at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1316)   
  56.         at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1235)   
  57.         at com.mchange.v2.c3p0.impl.NewProxyStatement.executeUpdate(NewProxyStatement.java:64)   
  58.         at com.feedsky.dao.impl.SrcItemDAOImpl.insert(SrcItemDAOImpl.java:178)   
  59.         at com.feedsky.service.impl.SrcItemServiceImpl.save(SrcItemServiceImpl.java:29)   
  60.         at com.feedsky.controller.SrcFeedController.saveSrcFeed(SrcFeedController.java:111)   
  61.         at com.feedsky.work.SrcStoreThread.saveSrcFeed(SrcStoreThread.java:174)   
  62.         at com.feedsky.work.SrcStoreThread.run(SrcStoreThread.java:53)   
  63.         at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:748)   
  64.         at java.lang.Thread.run(Thread.java:619)   
  65.   
  66.   
  67. ** END NESTED EXCEPTION **  
2008-02-18 10:52:53 ERROR Thread-4 com.feedsky.dao.AbstractMutiDbDAO - com.mysql.jdbc.CommunicationsException: Communications 

link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)
        at com.mysql.jdbc.Statement.executeQuery(Statement.java:1169)
        at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
        at com.feedsky.dao.AbstractMutiDbDAO.findBySQL(AbstractMutiDbDAO.java:34)
        at com.feedsky.dao.impl.SrcItemDAOImpl.findBySQL(SrcItemDAOImpl.java:326)
        at com.feedsky.dao.impl.SrcItemDAOImpl.loadByItemUuid(SrcItemDAOImpl.java:255)
        at com.feedsky.service.impl.SrcItemServiceImpl.loadByItemUuid(SrcItemServiceImpl.java:37)
        at com.feedsky.controller.SrcFeedController.saveSrcFeed(SrcFeedController.java:97)
        at com.feedsky.work.SrcStoreThread.saveSrcFeed(SrcStoreThread.java:174)
        at com.feedsky.work.SrcStoreThread.run(SrcStoreThread.java:53)
        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:748)
        at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



Last packet sent to the server was 176 ms ago.
2008-02-18 10:52:53 ERROR Thread-4 com.feedsky.work.SrcStoreThread - java.lang.NullPointerException
2008-02-18 10:52:53 INFO Thread-2 com.feedsky.dao.impl.SrcItemDAOImpl - com.mysql.jdbc.CommunicationsException: 

Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
        at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1316)
        at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1235)
        at com.mchange.v2.c3p0.impl.NewProxyStatement.executeUpdate(NewProxyStatement.java:64)
        at com.feedsky.dao.impl.SrcItemDAOImpl.insert(SrcItemDAOImpl.java:178)
        at com.feedsky.service.impl.SrcItemServiceImpl.save(SrcItemServiceImpl.java:29)
        at com.feedsky.controller.SrcFeedController.saveSrcFeed(SrcFeedController.java:111)
        at com.feedsky.work.SrcStoreThread.saveSrcFeed(SrcStoreThread.java:174)
        at com.feedsky.work.SrcStoreThread.run(SrcStoreThread.java:53)
        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:748)
        at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



在google和javaeye搜索了下,做了如下处理,但是还是会报错。

Java代码 复制代码
  1. public synchronized static DataSource createDataSource(String driver,String url,String username,String password) throws SQLException, ClassNotFoundException {   
  2.            
  3.         Class.forName(driver);   
  4.            
  5.         DataSource ds_unpooled = DataSources.unpooledDataSource(url,username,password);    
  6.            
  7.         Map overrides = new HashMap();    
  8.         //当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3    
  9.         overrides.put("acquireIncrement"5);   
  10.         overrides.put("minPoolSize"5);   
  11.         overrides.put("maxPoolSize"10);   
  12.         //overrides.put("initialPoolSize",cfg.getMaxPoolSize());   
  13.         overrides.put("maxStatements"10000);   
  14.         //最大空闲时间,3600秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0   
  15.         overrides.put("maxIdleTime"3600 );   
  16.         overrides.put("automaticTestTable""C3P0TestTable");   
  17.         overrides.put("testConnectionOnCheckin"true);   
  18. //      每60秒检查所有连接池中的空闲连接。Default: 0   
  19.         overrides.put("idleConnectionTestPeriod",18000);   
  20.         overrides.put("testConnectionOnCheckout"true);   
  21.         //获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效    
  22.         //保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试    
  23.         //获取连接失败后该数据源将申明已断开并永久关闭。Default: false    
  24.         overrides.put("breakAfterAcquireFailure"true);   
  25.            
  26.         //c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能    
  27.         //通过多线程实现多个操作同时被执行。Default: 3   
  28.         overrides.put("numHelperThreads"10);   
  29.            
  30.         // create the PooledDataSource using the default configuration and our overrides   
  31.         DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );   
  32.         return ds_pooled;    
  33.     }  
public synchronized static DataSource createDataSource(String driver,String url,String username,String password) throws SQLException, ClassNotFoundException {
		
		Class.forName(driver);
		
		DataSource ds_unpooled = DataSources.unpooledDataSource(url,username,password); 
		
		Map overrides = new HashMap(); 
		//当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 
		overrides.put("acquireIncrement", 5);
		overrides.put("minPoolSize", 5);
		overrides.put("maxPoolSize", 10);
		//overrides.put("initialPoolSize",cfg.getMaxPoolSize());
		overrides.put("maxStatements", 10000);
		//最大空闲时间,3600秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
		overrides.put("maxIdleTime", 3600 );
		overrides.put("automaticTestTable", "C3P0TestTable");
		overrides.put("testConnectionOnCheckin", true);
//		每60秒检查所有连接池中的空闲连接。Default: 0
		overrides.put("idleConnectionTestPeriod",18000);
		overrides.put("testConnectionOnCheckout", true);
		//获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 
		//保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试 
		//获取连接失败后该数据源将申明已断开并永久关闭。Default: false 
		overrides.put("breakAfterAcquireFailure", true);
		
		//c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能 
		//通过多线程实现多个操作同时被执行。Default: 3
		overrides.put("numHelperThreads", 10);
		
		// create the PooledDataSource using the default configuration and our overrides
		DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );
		return ds_pooled; 
	}




主要加了参数:

//如果设为true那么在取得连接的同时将校验连接的有效性。Default: false
testConnectionOnCheckin = true
//自动测试的table名称,c3p0将建一张名为C3P0TestTable的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么
//属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。Default: null
automaticTestTable=C3P0TestTable
//每1800秒检查所有连接池中的空闲连接。Default: 0
idleConnectionTestPeriod = 1800
//最大空闲时间,3600秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
maxIdleTime = 3600
/**因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false */
testConnectionOnCheckout = true

另外:还在JDBC URL上面加一个autoReconnect=true 参数

而且mysql服务的wait_timeout和interactive_timeout的值都是172800,已经远远大于c3p0的maxIdleTime参数值

做了这些修改后,还是会报错,而且平均每个小时有8-10次这样的错误发生。不知道还有没有更好的解决办法?谢谢。

还有种可能,mysql承受不了太大压力时是不是也会报这种错误呢?

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值