我试图从根本上导致我们的服务出现一些随机的、间歇性的“冻结”,在丢弃了几个问题之后,我们为我们的应用程序打开了 c3p0 调试级别日志记录,我们认为这似乎是一个 c3p0 配置问题。我们使用“Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production”作为我们的数据库。
日志摘录显示了作为服务调用一部分的两行。两条线之间的 3 秒内没有任何活动,我无法将其归因于任何特别的事情。
12 Apr 2013 02:25:42,386 [DEBUG] (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#8) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool: Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@1507a7] on CHECKIN has SUCCEEDED.
12 Apr 2013 02:25:45,443 [DEBUG] com.mchange.v2.c3p0.stmt.GooGooStatementCache: checkinStatement(): com.mchange.v2.c3p0.stmt.PerConnectionMaxOnlyStatementCache stats -- total size: 85; checked out: 0; num connections: 5; num keys: 85
c3p0 配置如下。
acquireIncrement = 2;
acquireRetryAttempts = 0; # keep retrying forever
acquireRetryDelay = 10000; # 10 secs.
checkoutTimeout = 1000; # 1 secs.
idleConnectionTestPeriod = 60; # 1 min.
maxConnectionAge = 1800; # 30 mins.
maxIdleTime = 1800; # 30 mins.
maxIdleTimeExcessConnections = 120;
maxPoolSize = 30;
maxStatementsPerConnection = 25;
minPoolSize = 30;
initialPoolSize = 30;
numHelperThreads = 16; # asynchronous threads
preferredTestQuery = "SELECT 1 FROM dual";
testConnectionOnCheckin = true;
我想知道是否存在导致冻结的配置问题?另外,我想知道通过设置 minPoolSize = maxPoolSize 是否会对性能产生任何影响(负面)。我找不到有答案的类似问题/问题。我不担心应用程序的启动时间,但是当连接达到“年龄”时会发生什么?我试图了解 c3p0 在处理陈旧连接时的行为。
为了了解负载,我们每分钟收到大约 300 次服务调用。CPU / 内存使用率都在合理的范围内,没有什么特别值得关注的。
任何见解将不胜感激。谢谢!-阿美亚