postgresql - 为什么 HikariCP 在 postgresql 中创建如此多的空闲连接

标签 postgresql glassfish database-connection postgresql-9.4 hikaricp

我有一个 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'

我得到以下结果,其中有许多连接,其中没有任何查询,如下图所示

enter image description here

几秒钟后,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/

相关文章:

java - 有状态部署的 Glassfish 异常

java - 如何知道什么是 glassfish - 完整的平台或网络配置文件?

mysql - 如何正确连接我的 php (symfony) 容器和 mysql 容器?

postgresql - 使用 debezium 链接 postgresql 11 无法获取数据库测试的编码

sql - Postgresql:计算具有相同值但顺序不同的行

deployment - GlassFish 3.1.2 在部署时给出 404,没有任何错误

sql-server - 从 Sql Server 2008 R2 连接到 IBM i 服务器

java - 优雅/高效地读取 MySQL 数据库中数百万条记录,Java

postgresql - 使用 postgres 和 pomm orm 按错误分组

postgresql - 如何在 PL/pgSQL 函数中使用 RETURN NEXT?