2010-07-25 85 views
2

我试图追踪泄漏的连接。 (特别是,我注意到连接在最后一个DataSource关闭时保持打开状态,使用C3P0进行连接池。我怀疑有一个错误,但希望确保我不会只是第一个愚蠢。)将Postgres连接与Java代码关联

是否有好办法,开放连接从Postgres的观点

 
postgres=# select * from pg_stat_activity; 

datid | datname | procpid | usesysid | usename |   current_query   | waiting |   xact_start   |   query_start   |   backend_start   | client_addr | client_port 
11564 | postgres | 95709 |  10 | postgres | select * from pg_stat_activity; | f  | 2010-07-25 14:20:24.97529-07 | 2010-07-25 14:20:24.97529-07 | 2010-07-25 14:20:19.066576-07 |    |   -1 

(1 row) 

与他们在Java/JDBC代码被打开的位置相关联? (或者也许是一些独特的字符串等) 似乎这应该是一个有用的东西!

回答

1

Postgresql 9支持application_name设置,可以通过这种方式读取,但在此之前版本的服务器中没有任何类似的设置。

与JBoss,我们有一个连接防范系统,将引发和内部捕捉异常,只要连接打开,为了捕捉回溯,然后储存与连接一起。然后,如果在事务结束时连接未关闭,那么该回溯会被记录并带有警告。我猜想,有可能将该策略调整为通用数据源 - 装饰器层,并定期扫描在10分钟内(或者大于预期寿命)未使用但未关闭的追踪连接。

+0

猜猜我只需要等待! – 2010-09-10 00:26:27

+0

那么,Postgres 9已经出来,这个解决方案出色地工作。 – 2011-02-25 19:35:01

0

这是不可能从PostgreSQL端检查的。它对Java代码一无所知。调用者只需传入用户名,密码和数据库名称即可。而已。但是可以从Java端进行检查。像log4jdbc这样的工具可能会对此有所帮助。

+0

我明白,这不是** **需要从Postgres的一面,但正是我希望的是,有一些未使用的连接参数,甚至只是一个“名称”参数的地方,方便操作的东西喜欢这个。 – 2010-07-26 05:37:50

+0

最好的办法是使用(如果可能的话)登录角色,只有你的应用程序使用登录角色。你仍然无法跟踪个人连接,但至少你会看到你的应用程序是否是问题。 – 2010-07-26 12:56:45