我尝试连接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
答案 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中设置断点来轻松验证,并检查包含初始异常对象的局部变量,该异常对象包含应标识异常源自何处的堆栈跟踪),它告诉您数据库服务器也有并发连接数限制......