0

我正在使用带有 c3p0 的 Hibernate 作为池提供程序。我已将其最大尺寸设置为仅 50。现在,我对我的应用程序进行了负载测试,其中 1000 个并发线程连续访问数据库,mysql max_connections 为 2000。我从应用程序得到了正确的响应,但有时我会遇到套接字异常错误。

所以,第一件事是如果我的池大小只有 50,那么 hibernate 如何管理 1000 个连接?这是否意味着正在从池中获取 50 个连接并创建其余连接?另外,为什么我必须得到像连接重置异常这样的套接字异常?

4

1 回答 1

0

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

如果您偶尔看到连接重置/套接字异常,您可能应该配置一些连接测试:

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

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

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

于 2013-06-12T10:18:21.343 回答