2013-06-11 46 views
0

我使用Hibernate和c3p0作为池化提供者。我已将其最大尺寸设置为50。现在,我使用1000个并发线程连续访问数据库并使用max_connections作为2000来执行我的应用程序的负载测试。我从应用程序获得正确的响应,但有时我面临套接字异常错误。如果池大小小于并发连接,Hibernate池如何工作?

所以,首先是如果我的池大小只有50,如何通过休眠来管理1000个连接?这是否意味着从池中取出50个连接,并创建其他连接?另外,为什么我必须获得套接字异常像连接重置异常?

回答

0

如果你设置正确,并且c3p0的maxPoolSize是50,那么如果1000个客户端碰到这个池,50个最初将获得Connections,其余的将暂时等待(),直到第一个队列返回连接。池的工作与应尽可能简短地保持连接的应用程序协作,以确保有效地共享有限数量的连接。

,如果你看到偶尔连接复位/插座外,你可能应该配置一些连接测试:

http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing

最新的预发布版本大约有连接测试一些更直接的建议;你可以从这里下载或阅读html源码:

https://github.com/swaldman/c3p0/blob/master/src/doc/index.html#L1071

+0

谢谢你的回复。我之前看到过这个链接,但我无法弄清楚避免套接字异常的设置。当线程数为100时我没有任何异常,但是当我将它设置为1000时,我开始收到异常。正如我读过的,插座异常是由于网络问题引起的。这是否意味着对于单个处理器,难以管理1000个并发连续连接?可能是 –

+0

,可能不会。如果你发布你的配置,我会评论连接测试。 –