当前位置: 首页 > 知识库问答 >
问题:

c3p0未获取连接,但存在空闲连接

松秦斩
2023-03-14

我的JAVA应用程序使用多线程一次处理多个请求。因此,不同的请求在同一时间用不同的线程进行处理。

hibernate.bytecode.use_reflection_optimizer=false
hibernate.connection.driver_class=oracle.jdbc.OracleDriver
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.search.autoregister_listeners=false

hibernate.connection.url=${jdbc.url}
hibernate.default_schema=${jdbc.schema}
hibernate.connection.username=${jdbc.username}
hibernate.connection.password=${jdbc.password}

hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=10
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
c3p0.preferredTestQuery=SELECT 1 from dual
c3p0.testConnectionOnCheckin=true
c3p0.idleConnectionTestPeriod=10
c3p0.driverClass=oracle.jdbc.driver.OracleDriver
    Session session = sessionFactory.openSession();
    try{                
        session.beginTransaction();

        Log.debug(localizator + "Start");
        processCounters(id, user, session);
        Log.debug(localizator + "Stop");
        session.getTransaction().commit();

    } finally{
        session.close();
    }

如果我观察数据库中打开的会话,有10个打开的会话(在c3p0中配置的最大数量),但它们都是空闲的。有没有一种方法可以让c3p0释放一些空闲连接,这样,至少有一个线程结束它的进程(增加最大连接数)?

共有1个答案

方和宜
2023-03-14

将连接池更改为BoneCP解决了这个问题。我使用了以下配置(我认为可以对其进行调优以进一步提高进程的速度):

bonecp.idleMaxAge=240
bonecp.idleConnectionTestPeriod=60
bonecp.partitionCount=3
bonecp.acquireIncrement=1
bonecp.maxConnectionsPerPartition=5
bonecp.minConnectionsPerPartition=2
bonecp.statementsCacheSize=50
bonecp.releaseHelperThreads=3

现在它不再挂起,更好的是,它提高了查询的性能。

 类似资料:
  • 我们有一个应用程序使用Hibernate连接到postgre数据库。我们使用C3P0作为连接池。 org.hibernate.ejb.hibernatepersistence ---类--- 正在保存对象: 正在加载对象: 创建EntityManagerFactory并获取EntityManager: 在日志中,我看到了以下内容,但我不知道它是否与我们的问题有关: 谢谢你的帮助!:)

  • null 如果我理解正确的话,我们应该在启动时有1个空闲连接,根据负载从0到3,对吗? 正在发生的情况是:启动时1个连接,如果负载较低,最多3个空闲连接,高负载后超过3个空闲连接。然后这些连接不会立即关闭,我们不知道它们何时/是否会关闭(有时它们中的一些会关闭)。 所以问题是:这种行为正常吗? DAO子类的使用示例:

  • initialSize-10 maxtotal-20 maxidle-10 minidle-0 minEvictableIdleTimeMillis-30min numTestsPerEvictionRun-60min numTestsPerEvictionRun-20 testonborrow-true testwhileidle-true validationquery-从dual中选择1 从

  • 我对HikariCP很陌生,我遇到了一个问题。我有一个使用hikaridaTasource从数据库获取连接的方法: 但是,当我检查pgAdmin(这是一个PostgreSQL db btw)时,我看到它没有使用空闲连接,而是创建了一堆新连接。我怎么才能修好这个? 您可以看到,在第一个图像中有19个连接,其中18个是空闲的。但是,在查询之后,会有一堆新的连接,其中大多数是空闲的。我配置Hikari错

  • C3P0不会在事务完成后释放连接。下面是堆栈跟踪: 池配置和事务配置如下: 如有任何建议,我将不胜感激

  • 问题内容: 我看到许多连接处于打开状态,并且很长一段时间(例如5分钟)保持空闲状态。 有什么解决方案可以在不重新启动mysql服务的情况下从服务器终止/关闭它? 我正在维护旧的PHP系统,无法关闭为执行查询而建立的连接。 我应该将my.cnf文件中的超时值减少为默认的8小时吗? 问题答案: 手动清理: 您可以杀死该进程ID。 但: php应用程序可能会报告错误(或网络服务器,请检查错误日志) 不要