【问题标题】:c3p0 doen't open enough connectionc3p0 没有打开足够的连接
【发布时间】:2013-01-14 01:24:22
【问题描述】:

我正在使用 Hibernate 3.4.0 GA 和 c3p0 0.9.0.4

maxPoolSize 属性设置为 2000,但创建的最大 JDBC 连接数约为 100、110(即使程序需要更多连接)。

这是我的配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="2000"/>
<property name="initialPoolSize" value="50"/>
<property name="minPoolSize" value="50"/>
<property name="acquireIncrement" value="3"/>
<property name="maxIdleTime" value="60"/>
</bean>

知道为什么吗?

【问题讨论】:

  • 你怎么知道它需要更多的连接?您是否进行了线程转储并验证您有 110 个线程都挂在数据库操作上?就此而言,您的线程池是什么样的。此外,在数据库连接方面,2000 相当多。你确定你有一个可以服务这么多并发查询的数据库实例吗?
  • 我看到线程等待执行对数据库的查询。我在 JavaMelody 监控中看到有 100 个活动连接到数据库。在 mysql 配置文件中,最大连接数设置为 2750
  • 我非常支持数据库上的2000个连接,如果您成功提供它们,将不会产生您想要的效果。您应该看到数据库中有什么问题,因此它同时需要如此多的连接。可能两个 SO 都没有这么大的连接池 :)

标签: java mysql hibernate jdbc c3p0


【解决方案1】:

数据库服务器端的连接数也受到限制。据我记得,MySQL 默认的最大连接数是 100。

对于 MySQL,另请参见 http://www.electrictoolbox.com/update-max-connections-mysql/

【讨论】:

  • 在mysql配置文件中设置最大连接数为2750
  • @Blabla 你确定它应用正确吗?如果你运行 [show variables like "max_connections"],它会按照你在 config 中的设置显示吗?
【解决方案2】:

我相信您需要在 Hibernate 配置中设置连接池参数,因为 c3p0.properties 中的那些特定参数将被 Hibernate 覆盖。

尝试将以下内容添加到您的 Hibernate 属性配置中:

<property name="c3p0.acquire_increment">3</property>  
<property name="c3p0.max_size">2000</property> 
<property name="c3p0.min_size">50</property>

您可以参考以下链接了解更多信息:https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool

【讨论】:

  • 建议你看一下初始化连接池时日志输出的内容。应该由 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getPoolManager 打印并以“Initializing c3p0 pool...”开头,这可能是您的某些设置没有被正确拾取。
  • 好像没问题:driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 61f533, idleConnectionTestPeriod -> -1, initialPoolSize -> 50, jdbcUrl -> jdbc:mysql://[IP]:3306/macadb?characterEncoding=UTF-8, loginTimeout -> 0, maxIdleTime -> 60, maxPoolSize -> 2000, maxStatements -> 0, maxStatementsPerConnection -> 0,minPoolSize -> 50,numHelperThreads -> 3,preferredTestQuery -> null,
  • 那么看来你的问题不在于配置 - 至少根据我所知道的。
猜你喜欢
  • 2014-05-10
  • 2019-03-04
  • 2021-05-18
  • 2013-03-22
  • 2011-02-09
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2018-11-10
相关资源
最近更新 更多