java 中与 Postgresql 的连接过多
Too many connection to Postgresql in java
我将 postgresql 用于数据库,但遇到连接问题。项目很大,内部流程很多,也很复杂。。。有时候,app创建了很多连接,db里面就没有连接了,app卡死了。问题不在数据库中,而是在应用程序中。
当我查看 pg_stat_activity
时,我看到了所有连接,它们的查询是 select 1
(连接打开时发生的第一个查询,用于验证连接)。因此,该应用程序似乎打开了一个连接,但并未使用它。当有很多这样的...你知道...
我不知道从哪里开始,在代码中,连接打开了。
是否有 technic/tool 供 java/postgres 知道他们来自哪里?
光是看代码就会花很长时间。
PostgreSQL 没有直接在应用程序源中查找内容的功能。
您只能尝试使用正确的 log_line_prefix
和 log_statement
参数在 PostgreSQL 端启用更详细的日志记录:这只有在语句是从特定的可执行文件或主机提交时才有用(因为相关的记录数据可以帮助找到正确的代码部分)。
如果应用程序启动了一个空闲时间过长的事务,您可以设置idle_in_transaction_session_timeout
。
不幸的是,PostgreSQL 对于非 运行 事务的空闲会话没有超时。
我将 postgresql 用于数据库,但遇到连接问题。项目很大,内部流程很多,也很复杂。。。有时候,app创建了很多连接,db里面就没有连接了,app卡死了。问题不在数据库中,而是在应用程序中。
当我查看 pg_stat_activity
时,我看到了所有连接,它们的查询是 select 1
(连接打开时发生的第一个查询,用于验证连接)。因此,该应用程序似乎打开了一个连接,但并未使用它。当有很多这样的...你知道...
我不知道从哪里开始,在代码中,连接打开了。
是否有 technic/tool 供 java/postgres 知道他们来自哪里?
光是看代码就会花很长时间。
PostgreSQL 没有直接在应用程序源中查找内容的功能。
您只能尝试使用正确的 log_line_prefix
和 log_statement
参数在 PostgreSQL 端启用更详细的日志记录:这只有在语句是从特定的可执行文件或主机提交时才有用(因为相关的记录数据可以帮助找到正确的代码部分)。
如果应用程序启动了一个空闲时间过长的事务,您可以设置idle_in_transaction_session_timeout
。
不幸的是,PostgreSQL 对于非 运行 事务的空闲会话没有超时。