2012-08-05 114 views
0

我有一个使用c3p0作为连接池的web应用程序。我们使用hibernate作为orm工具。 最近,我们一直在获取连接超时异常。为了调试这些异常,我启用了C3p0的日志记录功能,并在日志中获得了一些信息。任何人都可以帮助我完全理解它。连接池C3P0日志记录

DEBUG 2012-08-05 14:43:52,590 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] com.mchange.v2.c3p0.stmt.GooGooStatementCache: checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 2; checked out: 0; num connections: 1; num keys: 2 

从上面我可以观察到,连接池的总大小是2.检出的连接数是0.这是正确的吗?上面的num_connections和num键是什么?

谢谢..

回答

1

你在你所引用的日志位看到什么语句缓存的快照,而不是连接池。在消息被记录时,有两个缓存的PreparedStatements,属于单个Connection。这两份声明均未被检出/正在使用。

我希望这有助于!

+0

谢谢史蒂夫...我改变了log4j.properties中的记录器,现在有一组不同的日志.. – Npa 2012-08-06 00:46:25

+0

DEBUG 2012-08-05 19:44:02,526 [Timer-2] com.mchange.v2.resourcepool .BasicResourcePool:跟踪[email protected] [托管:4,未使用:4,排除:0](例如[email protected]) 你能告诉我什么管理,未使用和排除意味着在这个日志? – Npa 2012-08-06 00:46:51

+0

“托管”表示池中的连接数量; “未使用”表示当前未由客户端检出并在池中可用的连接数; “排除”是指检出的连接,但遇到某种错误或错误,例如,当客户端尝试将它们检入池中时,c3p0已将其标记为处置而不是重新纳入。 – 2012-08-06 19:52:22

0

例外可能是由于错误地定义C3P0设置。确保链接到正确的jar文件您的应用程序必须链接到“hibernate-c3p0 * .jar”,而不是“c3p0 * .jar”。 hibernate.cfg文件必须定义hibernate.connection.provider_class属性,以使c3p0设置生效。下面是一个示例设置

<property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> 

<property name="hibernate.c3p0.min_size">5</property> 
<property name="hibernate.c3p0.max_size">10</property> 
<property name="hibernate.c3p0.timeout">300</property> 
<property name="hibernate.c3p0.max_statements">50</property> 
<property name="hibernate.c3p0.idle_test_period">3000</property> 

日志条目指定有在游泳池4个连接,所有的4个连接可供应用程序使用。对数据库运行查询以列出所有活动连接将显示池连接。例如在Mysql中,你可以运行“show processlist;”来查看这些连接。