【问题标题】:c3p0 Pooled Connections Phantom connectionsc3p0 池化连接幻象连接
【发布时间】:2016-07-08 13:06:57
【问题描述】:

我在 Tomcat7 上使用 c3p0 作为数据源池管理器运行应用程序。我添加了一个连接定制器来记录每个获取/签出/签入的数据源。

我的日志 (catalina.out) 包含许多条目,因此:

收购 com.cloudera.impala.jdbc41.ImpalaJDBC41Connection@e5059be [z8kfsx9f16wfz9m1p2ghf4|729e8277] 收购com.cloudera.impala.jdbc41.ImpalaJDBC41Connection@217a2a9 [z8kfsx9f16wfz9m1p2ghf4|729e8277] 签入 com.cloudera.impala.jdbc41.ImpalaJDBC41Connection@e5059be 签出 com.cloudera.impala.jdbc41.ImpalaJDBC41Connection@e5059be

我还注意到一些 sql 异常,例如:

java.sql.SQLException: 关闭 com.mchange.v2.c3p0.impl.NewPooledConnection@6c5ca37c 时某些资源未能正确关闭 在 com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:571) 在 com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234) 在 com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470) 在 com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964) 在 com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

当我在日志文件中搜索“6c5ca37c”时,我没有看到任何表明何时获得连接的行。解析日志显示,所有“已获取”的连接都已成功“销毁”,但所有出现 sql 异常的连接都没有任何对应的已获取行

任何见解都会有所帮助。

【问题讨论】:

    标签: tomcat jdbc jndi c3p0


    【解决方案1】:

    抱歉回复慢。我最近一直不上网。

    com.mchange.v2.c3p0.impl.NewPooledConnection 是与 com.cloudera.impala.jdbc41.ImpalaJDBC41Connection 不同的对象。第一个包装和第二个的实例,但它们不会有一致的身份哈希码值(成为默认 toString() 方法的十六进制部分)。

    就其本身而言,您所看到的异常并不太令人担忧。 c3p0 对关闭事物非常神经质,如果不确定 ResultSetStatement 是否已被 close()ed,它会尝试 close() 他们。如果它们已经以某种方式失效,它们可能会在 close() 上抛出异常,从而导致此消息。

    我会检查日志中的其他地方(在此堆栈跟踪之前),以查看在关闭异常之前是否有其他问题可能更令人担忧。如果存在先前的问题,那可能会提供更多信息。如果可以的话,我会确保应用程序对 close() ResultSets 和 Statements 非常小心。否则,如果应用程序运行良好,我不会太担心这些偶尔出现的消息。 c3p0 在尝试关闭可能对该连接保持打开状态的每个资源后,将对您的连接进行 close() 调用。辅助资源的尝试 close() 异常不会阻止 c3p0 对 Connection 进行最佳尝试 close(),因此除非 JDBC 端出现严重损坏(conn.close() 失败),否则不会出现资源泄漏.

    【讨论】:

    • 您对 2 个不同的连接对象(一个是另一个的包装器)是完全正确的。另外,我确实怀疑关于未关闭语句的错误是一个问题,只是日志中没有其他任何内容指出发生了任何险恶的事情:(我接受你的回应是基于我的连接 ID据说找不到不是真正的幻影。
    猜你喜欢
    • 2013-08-20
    • 2012-01-15
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多