PSQLException: FATAL: извините, слишком много клиентов уже - PullRequest
0 голосов
/ 03 декабря 2018

Я написал сервер, который подключается к postgresql через slick, когда клиент отправляет запрос.Теперь у меня есть один клиент, который отправляет запрос каждую 1 секунду.После нескольких раз возникает проблема:

[SEVERE][slick.psql.db connection adder][Driver] Connection error: org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:438)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:222)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:194)
at org.postgresql.Driver.makeConnection(Driver.java:450)
at org.postgresql.Driver.connect(Driver.java:252)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:117)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:123)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:365)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:194)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:460)
at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71)
at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:697)
at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:683)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Это мой конфиг для slick postgres:

psql {

profile="slick.jdbc.PostgresProfile$"
driver="slick.driver.PostgresDriver$"
db {
  driver="org.postgresql.Driver"
  url="jdbc:postgresql://localhost:5432/mydb"
  user=postgres
  password=123
  numThreads=2
  queueSize=100
}

}

И конфиг postgres говорит max_connection = 100 Здесь код на стороне сервера выполнялся 50 раз (queueSize / numThreads), а затем показывал ошибку.

Кроме того, это конфигурация для соединения с БД:

lazy val psqlDbConfig: DatabaseConfig[PostgresProfile] = DatabaseConfig.forConfig("psql")
val psqlDb: JdbcBackend#DatabaseDef = psqlDbConfig.db

//sql commands
 psqlDb.run(sql""" select * from mytable  """.as[MyObj])

}

Я предполагал, что при достижении максимального соединения hikari должен освободить их и управлять пулом, но этого не произошло.

...