[BoneCP Version : 0.8.0.RELEASE]
[Guava Version : 11.0.2]
我使用guice-mybatis
和bonecp
作为数据源提供程序。我已经用getConnection()
覆盖了MySQL驱动程序,以便在mysql master和slave之间进行旋转。我看到boneCP创建的连接数多于应用程序所需的连接数。考虑到QPS,我们有10个活动连接应该已经足够但是创建了超过30个。此外,bonecp统计数据给出了负数:
[Format]
Cluster = pool.getTotalCreatedConnections()|pool.getTotalFree()|pool.getTotalLeased()
[ Data ]
cluster[1]=10|44|-34,
cluster[2]=10|50|-40,
cluster[3]=-28|0|-28,
cluster[4]=10|45|-35,
cluster[5]=10|49|-39,
cluster[6]=10|50|-40,
cluster[7]=10|46|-36,
cluster[8]=10|34|-24,
Following are my bonecp configurations :
bonecp.connectionTestStatement = "SELECT now()"
bonecp.partitionCount = 1
bonecp.maxConnectionsPerPartition = 50
bonecp.minConnectionsPerPartition = 10
bonecp.acquireIncrement = 1
bonecp.idleConnectionTestPeriod = 60
bonecp.timeUnit = SECONDS
bonecp.idleMaxAge = 10
bonecp.poolAvailabilityThreshold = 1
bonecp.maxConnectionAgeInSeconds = 10
bonecp.acquireRetryDelayInMs = 500
bonecp.acquireRetryAttempts = 10
从netstat我看到ESTABLISHED连接的总数等于所有集群的pool.getTotalFree()
的总和。
注意:我有另一个db [oracle]我正在使用bonecp而不会遇到这个问题。唯一的区别是我们没有包装驱动程序,并且不需要在getConnection()
请求的不同主机上进行轮换。
我在使用C3P0之前转向BoneCP,我们遇到了性能问题,但统计数据很好。 我正在阅读源代码以确定根本原因。