我有一个使用 Hibernate 4.1.1 和 Spring 3.1.1 和 Postgres 9.2 的 Web 应用程序。我还使用 spring transaction api 和 c3p0 连接池。数据库服务器位于另一台服务器上,没有安装 pgbouncer,只有 Postgres。
我在日志中有很多关于无法签出数据库连接的错误。但是当我在 Postgres 服务器上查看状态时(“SELECT datname,procpid,current_query FROM pg_stat_activity”),这些连接中有 95% 是“IDLE”。
它是怎么发生的?这种幽灵连接不允许执行正常查询。
错误:
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@4bbf8a41 -- timeout at awaitAvailable()