【问题标题】:C3po creates too many connectionsC3po 创建了太多的连接
【发布时间】:2014-07-25 02:16:01
【问题描述】:

这就是我的 c3po Spring 配置的样子;

    <property name="idleConnectionTestPeriod" value="120" />
    <property name="maxIdleTime" value="1800" />
    <property name="maxPoolSize" value="2" />
    <property name="unreturnedConnectionTimeout" value="600" /> 
    <property name="numHelperThreads" value="10" />
    <property name="maxStatementsPerConnection" value="1" />

我尝试监控与数据库建立了多少连接,因此我在重新启动应用程序后针对我的 Oracle 数据库运行此脚本;

select
   substr(a.spid,1,9) pid,
   substr(b.sid,1,5) sid,
   substr(b.serial#,1,5) ser#,
   substr(b.machine,1,6) box,
   substr(b.username,1,10) username,

   substr(b.osuser,1,8) os_user,
   substr(b.program,1,30) program
   from v$session b, v$process a
   where
   b.paddr = a.addr and type='USER' order by spid;

这个脚本结果显示打开了太多的连接,所以假设这个脚本结果确实表明了会话/连接的数量。如何使用我的弹簧配置减少它们?因为无论我改变多少参数结果都不会改变。

【问题讨论】:

  • 为了理智,您可能会检查 ResultSet/Statement/Connection 是否已关闭。 maxPoolSize 为 2 是我希望的测试;更短的时间使用更大的现实池可能是更好的测试。
  • @Joop Eggen 如何检查 ResultSet/Statement/Connection 是否已关闭?
  • 检查是否关闭主要是通过检查代码和日志来完成的。使用异常日志记录、spring 的 JdbcTemplate、try-with-resources 等有帮助。

标签: java oracle c3p0 spring-jdbc


【解决方案1】:

仔细观察....因为 maxPoolSize 用于定义一个池大小,单个数据源可以包含多个池,在这种情况下,连接数变为

池数 * maxPoolSize

所以不要寻找你创建的池

【讨论】:

  • tnx 我在哪里可以找到那个?
猜你喜欢
  • 2015-06-13
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2016-02-19
  • 2013-03-31
  • 2021-12-13
  • 1970-01-01
  • 2014-08-06
相关资源
最近更新 更多