与Hibernate的连接异常太多

时间:2014-07-30 06:42:49

标签: mysql multithreading hibernate connection-pooling

我尝试连接Hibernate时出错。 代码创建1000个线程,每个线程打开一个连接。无论如何,代码很短,他们很快就关闭了连接。

我打印一个具有连接总数的计数器(当我打开一个时递增,当我关闭一个时递减...)。 当我得到大约155连接时,我得到了这个错误。我试图将池连接(默认值为150)增加到500,但是我得到了180个连接的相同错误。

我做了另一个小测试,在我开始每个线程之后我做了一个Thread.sleep(10)它工作,我不知道这就是为什么如果我说我的池是500大小,它不起作用。

for (int i=0; i<1000; i++) {
            Thread.sleep(10); //it works with this modification because it gets time to finish some threads..
            newThread = new WThread(params);
            newThread.start();
        }

游泳池配置:

<property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
                <prop key="hibernate.show_sql">false</prop>

                <prop key="hibernate.hbm2ddl.auto">validate</prop>

                <prop key="hibernate.c3p0.min_size">2</prop>
                <prop key="hibernate.c3p0.max_size">125</prop> --> increment this parameter it's not working.
                <prop key="hibernate.c3p0.timeout">1800</prop>
                <prop key="hibernate.c3p0.max_statements">500</prop>
            </props>

我不知道它可能是什么,,,我的电脑记忆?我不知道。

我得到的错误:

14/07/30 09:57:59 WARN spi.SqlExceptionHelper: SQL Error: 1040, SQLState: 08004
14/07/30 09:57:59 ERROR spi.SqlExceptionHelper: Data source rejected establishment of connection,  message from server: "Too many connections"

...

14/07/30 09:57:59 INFO internal.DefaultLoadEventListener: HHH000327: Error performing load command : org.hibernate.exception.JDBCConnectionException: Could not open connection
14/07/30 09:57:59 WARN spi.SqlExceptionHelper: SQL Error: 1040, SQLState: 08004

2 个答案:

答案 0 :(得分:2)

增加 hibernate.c3p0.max_size 没有帮助,因为MySQL数据库没有更多的连接要提供。作为documented,max_connections的默认值为151:

  

允许的连接数由   max_connections系统变量。默认值为151以进行改进   当MySQL与Apache Web服务器一起使用时的性能。

设置此变量立即生效,无需重启:

    set global max_connections = 500;

要在重启后保持此设置,还应将以下内容添加到my.cnf:

    max_connections = 500

答案 1 :(得分:0)

您的错误消息显示:

  

数据源拒绝建立连接,来自服务器的消息:“连接太多”

该消息并非完全误导(您可以通过在SqlExceptionHelper中设置断点来轻松验证,并检查包含初始异常对象的局部变量,该异常对象包含应标识异常源自何处的堆栈跟踪),它告诉您数据库服务器也有并发连接数限制......