我有一个 JSP 应用程序在 glassfish5 上运行,并使用 postgresql 作为数据库服务。为了管理连接,我选择了 HikariCP,如下所示
config.setDataSourceClassName("org.postgresql.ds.PGSimpleDataSource");
config.addDataSourceProperty("serverName", host);
config.addDataSourceProperty("portNumber", port);
config.addDataSourceProperty("databaseName", database);
config.addDataSourceProperty("user", username);
config.addDataSourceProperty("password", password);
config.addDataSourceProperty("assumeMinServerVersion", postrgesVersion);
config.setMinimumIdle(100);
config.setMaximumPoolSize(100);
config.setAutoCommit(false);
config.setIdleTimeout(3000);
ds = new HikariDataSource(config);
并以这种方式使用数据源实现
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
当我在 pgAdmin 中运行以下查询时
select datname,pid,usename,client_addr,client_port,backend_start,query,state from pg_stat_activity where datname = 'db_name' AND client_addr='10.1.0.56'
我得到以下结果,其中有许多连接,其中没有任何查询,如下图所示
几秒钟后,postgres 提示连接太多。有没有人遇到过这样的事情,请帮忙。
最佳答案
setMinimumIdle(100)
将在启动时创建 100 个连接,这是不必要的/不好的做法。
您应该根据 Hikari connection pool grows to maximum size at start 降低空闲连接和最大池大小回答
If you have 3 active nodes (and 1 backup), and in production each node normally needs 5-6 connections, possibly set maximumPoolSize to 20, minimumIdle to 2, and idleTimeout to something like 2 minutes (120000ms).
所以在你的情况下改变两行:
config.setMinimumIdle(2);
config.setMaximumPoolSize(20);
关于postgresql - 为什么 HikariCP 在 postgresql 中创建如此多的空闲连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50234218/