如何找到保留Postgres连接的应用程序?

时间:2017-05-03 08:36:57

标签: java postgresql tomcat jdbc

Tomcat上运行了多个应用程序。他们使用Postgres数据库,有时超过最大连接限制:

org.hibernate.exception.GenericJDBCException: Error calling Driver#connect         at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)

Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
    at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:684)

我试图增加限制(How to resolve FATAL: connection limit exceeded for non-superusers),但问题仍然存在。如何找出哪个应用程序接管连接插槽?

1 个答案:

答案 0 :(得分:3)

将ApplicationName添加到连接字符串,如下所示:

jdbc:postgresql://localhost:5435/MyDB?ApplicationName=MyApp

然后你会看到它:

select application_name, count(1), state 
from pg_stat_activity 
group by application_name, state;

只有当你为不同的应用程序设置单独的连接字符串时,这才有效。

同时检查与JDBC池连接的某些info