我有一个在四台服务器上负载平衡的 Web 应用程序。这三台服务器连接到公共数据库,最大连接数设置为 600。
我在tomcat中的当前数据库池配置如下:
<Resource name="jdbc/AppDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
removeAbandoned ="true"
removeAbandonedTimeout="300"
testOnBorrow="true"
validationQuery="select 1"
logAbandoned ="true"
username="username"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="dbconnectionurl"
/>
但是这个配置给出了异常:Connection Timeout : Waiting for Idle Object.
我已经监控了数据库服务器,我的有效连接利用率只有 350。
如果我向后计算,我总共使用了 400 个连接。这使我可以从 DB 获得 200 个额外的数据库连接。
因此,我无法理解为什么会出现这个异常。
有人可以提出更好的配置吗?maxActive
和的理想比例应该是maxIdle
多少?
更新:
我找到了一个相关链接: Tomcat JDBC pool 中没有足够的空闲连接
但我不能冒险将 maxIdle 或 MaxActive 设置为 -1(INFINITE),因为我有多个实例正在运行,它可能会导致连接分布不均匀。这可能会导致一个实例运行良好,而其他实例可能由于缺少连接而失败。