spring boot postgres:致命:抱歉,已经有太多客户端了

spring boot postgres:致命:抱歉,已经有太多客户端了,spring,postgresql,spring-boot,jdbc,Spring,Postgresql,Spring Boot,Jdbc,我在我的spring boot应用程序中使用postgres作为数据库,当我运行我的应用程序时,我得到一个错误致命:对不起,已经有太多的客户端了。我在application.yml中配置了一个连接池,但仍然存在相同的问题 spring: jpa: database: postgresql hibernate: ddl-auto: update datasource: url: jdbc:postgresql://localhost:5432/sp

我在我的spring boot应用程序中使用postgres作为数据库,当我运行我的应用程序时,我得到一个错误
致命:对不起,已经有太多的客户端了
。我在application.yml中配置了一个连接池,但仍然存在相同的问题

spring:
  jpa:
    database: postgresql
    hibernate:
      ddl-auto: update
  datasource:
    url: jdbc:postgresql://localhost:5432/sp
    username: sp
    password: admin
    continueOnError: true
    platform: dev
    tomcat:
      maxIdle: 10
      max-active: 100
      max-wait: 10000
      validationQuery: select 1
      removeAbandoned: true
      removeAbandonedTimeout: 120
      logAbandoned: true
      testOnBorrow: true
      testOnConnect: true
      testWhileIdle: true
2018-06-13 09:29:47.311[错误][主要][日志记录.DirectJDKLog:181] 无法创建池的初始连接。 org.postgresql.util.psqleexception:FATAL:désolé,trop de clients sont déjáconnectés at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:443) 在 org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:217) 在 org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) 位于org.postgresql.jdbc.PgConnection.(PgConnection.java:215) org.postgresql.Driver.makeConnection(Driver.java:404)位于 org.postgresql.Driver.connect(Driver.java:272)位于 org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310) 在 org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:735) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:667) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:482) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:154) 在 org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118) 在 org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107) 在 org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131)


检查postgresql.conf文件中的参数max_connections,总连接数显示在application.yml中

ALTER SYSTEM SET max_connections ='150';
version: '3.6'
services:
  db:
    image: postgres
    ports:
      - 54321:5432
    environment:
      - POSTGRES_PASSWORD=myPassword
      - POSTGRES_USER=sa
      - POSTGRES_DB=testdatabase
    volumes:
      - ./src/main/resources/pg-init-scripts:/docker-entrypoint-initdb.d
并使用

select pg_reload_conf();

注意:连接的数量取决于活动和空闲连接,在连接中设置更多的数量将过度终止进程。

工作示例

application.yml

ALTER SYSTEM SET max_connections ='150';
version: '3.6'
services:
  db:
    image: postgres
    ports:
      - 54321:5432
    environment:
      - POSTGRES_PASSWORD=myPassword
      - POSTGRES_USER=sa
      - POSTGRES_DB=testdatabase
    volumes:
      - ./src/main/resources/pg-init-scripts:/docker-entrypoint-initdb.d
resources/pg init scripts/connections.sql

ALTER SYSTEM SET max_connections ='1000';
select pg_reload_conf();
参考资料/pg init scripts/init.sql

-- your stuff

init文件夹中的所有脚本都将被执行。

在开发过程中,我的django应用程序突然出现了相同的错误。第一个想法是django代码在某处打开了一个连接,但没有关闭它。然而,事实证明问题出在pgadmin4上。只要我在pgadmin中查看一个表(只需简单的“查看>所有行”),连接数就会增加1

为了解决这个问题,我在pgadmin中查看了一些表,还使用测试网站向我的开发服务器发出了一些请求,在每一步之后,我都通过

SELECT COUNT(*) from pg_stat_activity;

要关闭来自pgadmin的连接,我必须断开pgadmin与服务器的连接,然后重新连接。因此,在更改max_connections值之前,您可能需要确定哪个应用程序/程序正在打开而不是关闭连接。在我的例子中,结果证明没有必要更改值或实现池机制,只是在开发过程中偶尔重新启动pgadmin。

我没有访问postgresql.conf文件的权限,我使用pgadmin,我执行
SHOW max\u connections
它向我显示max_connections=100oh,增加postgresql.conf中的连接数,因为正如我在application.yml中看到的那样,您的101010连接处于空闲、活动和等待状态。是否有其他不修改postgresql.conf文件的解决方案?@PawanSharma您从哪里获取该
101010
?根据配置,最大值为100(
max active
)。因此,将
max_connections
增加到略高于100就足够了(假设只有一个实例,可能还有来自其他工具的少量连接。将其设置为20000就太过分了。@Mark Rotterveel这只是一个例子