Node.js 空闲postgres连接未关闭
我正在使用节点postgres池,并且我已经设置了idleTimeoutMillis,但是空闲连接并没有关闭,它们正在堆积Node.js 空闲postgres连接未关闭,node.js,postgresql,Node.js,Postgresql,我正在使用节点postgres池,并且我已经设置了idleTimeoutMillis,但是空闲连接并没有关闭,它们正在堆积 const {Pool} = require('pg') pool = new Pool({ connectionString: process.env.PG_HOST, ssl: false, max: 20, idleTimeoutMillis
const {Pool} = require('pg')
pool = new Pool({
connectionString: process.env.PG_HOST,
ssl: false,
max: 20,
idleTimeoutMillis: 1000,
connectionTimeoutMillis: 20000,
});
let client;
try {
client = await pool.connect()
await client.query(sqlQuery)
} catch(err) {
console.log(err)
reject(err)
} finally {
if(client)
client.release()
}
虽然我在代码中的很多地方都发布了连接,但很少有地方没有关闭连接。因此,空闲连接正在堆积。但是,在idleTimeoutMillis连接应该被终止后,它们不会被终止。您是否正在将连接检查回池中?你能给出一个更完整的例子吗?@jjanes,我已经从池的角度更新了question,没有返回的连接不是空闲的。@horse\u没有名称,但当我检查pg\u stat\u活动表时,这些连接是空闲的。有没有办法在一段时间后通过代码清理未释放的连接?正如我所说:池不知道这一点。游泳池对“空闲”的看法与Postgres的“空闲”有所不同。当池认为连接处于空闲状态时(从池的角度来看),池将物理上关闭这些连接。您需要确保所有未使用的连接都正确返回到池中。这是应用程序中的一个错误。解决这个问题,而不是在其他层中尝试难看的解决方法。您是否正在检查回池中的连接?你能给出一个更完整的例子吗?@jjanes,我已经从池的角度更新了question,没有返回的连接不是空闲的。@horse\u没有名称,但当我检查pg\u stat\u活动表时,这些连接是空闲的。有没有办法在一段时间后通过代码清理未释放的连接?正如我所说:池不知道这一点。游泳池对“空闲”的看法与Postgres的“空闲”有所不同。当池认为连接处于空闲状态时(从池的角度来看),池将物理上关闭这些连接。您需要确保所有未使用的连接都正确返回到池中。这是应用程序中的一个错误。解决这个问题,而不是在其他层中尝试丑陋的解决方法。