Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式确定连接池大小?_Java_Mysql_Hibernate_Connection Pooling_C3p0 - Fatal编程技术网

Java 如何以编程方式确定连接池大小?

Java 如何以编程方式确定连接池大小?,java,mysql,hibernate,connection-pooling,c3p0,Java,Mysql,Hibernate,Connection Pooling,C3p0,是否有任何方法可以通过编程方式确定数据库连接池大小(已使用的连接/连接池中剩余的连接)?我们正在使用带有C3P0的Hibernate 我们在连接到db时遇到问题。引发以下异常,并且数据未保存在db中 1005,MA,19/09/11 09:39:14,com.novosys.gtw.business.frontend.SnapshotMessageBusiness.save, Major: Cannot open connection org.hibernate.exception.Generi

是否有任何方法可以通过编程方式确定数据库连接池大小(已使用的连接/连接池中剩余的连接)?我们正在使用带有C3P0的Hibernate

我们在连接到db时遇到问题。引发以下异常,并且数据未保存在db中

1005,MA,19/09/11 09:39:14,com.novosys.gtw.business.frontend.SnapshotMessageBusiness.save, Major: Cannot open connection org.hibernate.exception.GenericJDBCException: Cannot open connection at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354) at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342) at $Proxy0.beginTransaction(Unknown Source) at com.novosys.gtw.util.base.BaseBusiness.save(BaseBusiness.java:199) at com.novosys.gtw.business.backend.receivesnapshotmessage.filter.SaveMessageFilter.decode(SaveMessageFilter.java:102) at org.apache.mina.filter.codec.demux.DemuxingProtocolCodecFactory$ProtocolDecoderImpl.doDecode(DemuxingProtocolCodecFactory.java:292) at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:158) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648) at com.novosys.gtw.business.backend.receivesnapshotmessage.filter.WhitelistFilter.messageReceived(WhitelistFilter.java:231) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648) at com.novosys.gtw.business.backend.receivesnapshotmessage.filter.MoniterFilter.messageReceived(MoniterFilter.java:92) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648) at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:220) at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:264) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) at java.lang.Thread.run(Thread.java:595) Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database! at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) ... 31 more Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) ... 34 more
我不认为您的问题是连接池本身,但更一般地说是连接泄漏。此问题通常与使用
HibernateDaoSupport.getSession()
时未与
HibernateDaoSupport.releaseSession()正确配对有关。一般来说,你想要的是

public SomeObject getSomething() 
{ 
    Session session = null;
    try 
    {
        session = this.getSession();
        Query query = session.createSQLQuery("SELECT * FROM SomeTable WHERE SomeClause").addEntity(SomeObject.class); 

        // extract object from query 

        return someObject; 
    } 
    finally 
    {
        if (session != null) 
            this.releaseSession(session);
    }        
}

这可以通过使用
HibernateCallback
实现自动化。您可以通过向this.getHibernateTemplate().executeFind提供查询来实现这一点,它将在Hibernate中使用具有自动资源管理功能的会话。

我不认为您的问题是连接池本身,但更一般地说是连接泄漏。此问题通常与使用
HibernateDaoSupport.getSession()
时未与
HibernateDaoSupport.releaseSession()正确配对有关。一般来说,你想要的是

public SomeObject getSomething() 
{ 
    Session session = null;
    try 
    {
        session = this.getSession();
        Query query = session.createSQLQuery("SELECT * FROM SomeTable WHERE SomeClause").addEntity(SomeObject.class); 

        // extract object from query 

        return someObject; 
    } 
    finally 
    {
        if (session != null) 
            this.releaseSession(session);
    }        
}

这可以通过使用
HibernateCallback
实现自动化。为此,您可以向
this.getHibernateTemplate().executeFind
提供查询,该查询将在Hibernate中使用具有自动资源管理功能的会话。

除了ex0du5建议的内容外,异常跟踪还建议:

Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
  • 这意味着连接池无法从数据库获取新连接
  • 请检查MySQL日志是否有任何错误
  • 检查mysql配置上的最大连接池大小和最大连接数设置。(连接池大小最不可能超过mysql配置上的最大连接数,但请确保这一点)

此外,您还可以在中监视C3P0连接池的所有参数(包括最大连接设置)。

除了ex0du5所建议的之外,异常跟踪还建议:

Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
  • 这意味着连接池无法从数据库获取新连接
  • 请检查MySQL日志是否有任何错误
  • 检查mysql配置上的最大连接池大小和最大连接数设置。(连接池大小最不可能超过mysql配置上的最大连接数,但请确保这一点)

此外,您还可以在中监视C3P0连接池的所有参数(包括最大连接设置)。

要正确配置连接池大小,您需要有调查连接使用模式的指标

旨在帮助您确定正确的连接池大小,因为它可以监控以下指标:

  • 并发连接直方图
  • 并发连接请求直方图
  • 数据源连接获取时间直方图
  • 连接租用时间直方图
  • 最大池大小直方图
  • 总连接获取时间直方图
  • 溢出池大小直方图 重试次数直方图
您可以查看以下文章:


要正确配置连接池大小,您需要有调查连接使用模式的指标

旨在帮助您确定正确的连接池大小,因为它可以监控以下指标:

  • 并发连接直方图
  • 并发连接请求直方图
  • 数据源连接获取时间直方图
  • 连接租用时间直方图
  • 最大池大小直方图
  • 总连接获取时间直方图
  • 溢出池大小直方图 重试次数直方图
您可以查看以下文章:


的可能重复的可能重复如果您发布最少的代码进行复制,这可能会得到更好的验证,但这是看到此错误转储时的常见答案。并非每次都会发生。我把代码贴在我的问题下面,我认为连接泄漏不是这里的情况,因为它已经被妥善处理。如果我错了,请更正。问题已用代码段更新。请看一看如果你发布了最少的代码来复制,这可能会得到更好的验证,但这是看到这个错误转储时的常见答案。它不是每次都发生。我把代码贴在我的问题下面,我认为连接泄漏不是这里的情况,因为它已经被妥善处理。如果我错了,请更正。问题已用代码段更新。请看一看