postgresql - PSQLException: FATAL: 抱歉,已经有太多客户
问题描述
我编写了一个服务器,当客户端发送请求时,它通过 slick 连接到 postgresql。现在我有一个客户端每 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 config 说 max_connection = 100
这里,服务器端的代码运行了 50 次(queueSize/numThreads)然后显示错误。
此外,这是 db 连接的配置:
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
必须释放它们并管理池,但这种情况没有发生。
解决方案
推荐阅读
- android - 我需要帮助找到一种在 android 中创建布局的方法
- unity3d - Unity-如何创建对话树?
- ios - Firestore/Swift 4:检查用户名是否存在?
- amazon-web-services - 图形数据库是否适合此类数据
- java - MediaMetadataRetriever:尝试使用 url 从 mp3 检索专辑封面时应用程序崩溃
- android - 使用 retrofit2 发布 Soap XML 请求(不推荐使用简单 XML 框架)
- c# - SSIS:无法在 DontSaveSensitive 模式下使用 GetSensitiveValue() 访问脚本任务中的敏感参数
- postgresql - 函数返回具有动态列名的行集
- python - 了解对 NumPy 数组执行条件索引时出现的 DeprecationWarning 错误(版本 1.11.13,Python 2.7)
- sql - 将sql表列数据类型从smallmoney更改为money的影响