我正在使用Hibernate和c3p0作为池提供程序。我将其最大尺寸设置为50。现在,我执行了我的应用程序的负载测试,其中1000个并发线程连续访问数据库,并且mysql max_connections为2000.我从应用程序得到了正确的响应,但有时我遇到套接字异常错误。
首先,如果我的池大小仅为50,那么hibernate如何管理1000个连接?这是否意味着从池中获取50个连接并创建其余连接?另外,为什么我必须得到套接字异常,如连接重置异常?
答案 0 :(得分:0)
如果你已经正确设置并且c3p0的maxPoolSize是50,那么如果1000个客户端命中池,50个将初始获得Connections,其余的将暂时等待(),直到第一个队列返回Connections。池应用程序与应尽可能短暂连接Connections的应用程序协作,确保有效共享有限数量的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