gpt4 book ai didi

mysql - c3p0 客户端在等待从 com.mchange.v2.resourcepool.BasicResourcePool 获取资源时超时

转载 作者:行者123 更新时间:2023-11-28 22:49:47 25 4
gpt4 key购买 nike

我在 tomcat 版本 7 上部署了一个 java 应用程序。对于数据源,我使用了连接到 mysql 数据库的 c3p0。它多年来一直运行良好,最近我开始收到此错误:“客户端在等待从 com.mchange.v2.resourcepool.BasicResourcePool 获取资源时超时”。

当我遇到这个问题时,唯一的解决办法是重新启动应用程序。重新启动 mysql 没有帮助。

我也有使用保存数据库的 php 应用程序,它们没有受到影响,它们工作正常。

我的 java 应用程序仅供一个小团队使用,它是一个后端应用程序。

这是我的 c3p0 配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db?relaxAutoCommit=true&amp;autoReconnect=true&amp;autoReconnectForPools=true" />
<property name="user" value="viva4578" />
<property name="password" value="amd139fbg" />
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="maxConnectionAge" value="14400" />
<property name="checkoutTimeout" value="30000" />
<property name="acquireIncrement" value="1" />
<property name="acquireRetryAttempts" value="30" />
<property name="testConnectionOnCheckin" value="true" />
<property name="testConnectionOnCheckout" value="true" />
<property name="preferredTestQuery" value="SELECT 1" />
<property name="idleConnectionTestPeriod" value="3600" />
<property name="maxIdleTime" value="7200" />
<property name="maxIdleTimeExcessConnections" value="1800" />
<property name="unreturnedConnectionTimeout" value="3600" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />
</bean>

这是启动应用程序后 c3p0 的输出日志:

Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ 
acquireIncrement -> 1,
acquireRetryAttempts -> 30,
acquireRetryDelay -> 1000,
autoCommitOnClose -> false,
userOverrides -> {},
automaticTestTable -> null,
breakAfterAcquireFailure -> false,
checkoutTimeout -> 30000,
connectionCustomizerClassName -> null,
connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester,
contextClassLoaderSource -> caller,
dataSourceName -> z8kflt9n1b12nsh118544e|7bc1a68b,
debugUnreturnedConnectionStackTraces -> true,
description -> null,
driverClass -> com.mysql.jdbc.Driver,
extensions -> {},
factoryClassLocation -> null,
forceIgnoreUnresolvedTransactions -> false,
forceUseNamedDriverClass -> false,
identityToken -> z8kflt9n1b12nsh118544e|7bc1a68b,
idleConnectionTestPeriod -> 3600,
initialPoolSize -> 5,
jdbcUrl -> jdbc:mysql://localhost:3306/db?relaxAutoCommit=true&autoReconnect=true&autoReconnectForPools=true,
maxAdministrativeTaskTime -> 0,
maxConnectionAge -> 14400,
maxIdleTime -> 7200,
maxIdleTimeExcessConnections -> 1800,
maxPoolSize -> 20,
maxStatements -> 0,
maxStatementsPerConnection -> 0,
minPoolSize -> 5,
numHelperThreads -> 3,
preferredTestQuery -> SELECT 1,
privilegeSpawnedThreads -> false,
properties -> {user=******, password=******},
propertyCycle -> 0,
statementCacheNumDeferredCloseThreads -> 0,
testConnectionOnCheckin -> true,
testConnectionOnCheckout -> true,
unreturnedConnectionTimeout -> 3600,
usesTraditionalReflectiveProxies -> false
]

我使用的是 c3p0 的 0-0.9.5 版本。

如果有人能帮忙

谢谢

最佳答案

这里

<property name="checkoutTimeout" value="30000" />

如果客户端无法在 30 秒内得到服务,您已将 c3p0 配置为抛出此异常。那已经开始发生了。据推测,DataSource 上的负载增加了。考虑扩大规模。增大 maxPoolSize,同时增加 numHelperThreads,以防异步任务中出现积压问题。

(您还可以增加 checkoutTimeout 的值,或删除该设置,以便客户端结帐永远不会超时。这将消除此异常。但这不是真正的问题。30 秒是一个长等待连接的时间。调整 c3p0 以比这更迅速地提供连接可能更好。)

关于mysql - c3p0 客户端在等待从 com.mchange.v2.resourcepool.BasicResourcePool 获取资源时超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43630264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com