我正在尝试连接到Postgresql数据库,我收到以下错误:
错误代码:org.postgresql.util.对不起,已经有太多客户了
该错误意味着什么以及如何修复它?
我的server.properties
文件如下:
serverPortData=9042
serverPortCommand=9078
trackConnectionURL=jdbc:postgresql://127.0.0.1:5432/vTrack?user=postgres password=postgres
dst=1
DatabaseName=vTrack
ServerName=127.0.0.1
User=postgres
Password=admin
MaxConnections=90
InitialConnections=80
PoolSize=100
MaxPoolSize=100
KeepAliveTime=100
TrackPoolSize=120
TrackMaxPoolSize=120
TrackKeepAliveTime=100
PortNumber=5432
Logging=1
5条答案
按热度按时间xytpbqjk1#
以下错误的说明:
摘要:
您打开的数据库连接数超过了允许的限制。您运行了如下代码:
Connection conn = myconn.Open();
,并且忘记运行conn.close();
。仅仅因为你的类被销毁并且垃圾回收并没有释放到数据库的连接。最快的解决方法是确保你有下面的代码和创建连接的类:将该代码放在任何创建Connection的类中。然后,当类被垃圾回收时,连接将被释放。
运行此SQL以查看postgresql允许的最大连接数:
默认值是100。在好的硬件上PostgreSQL一次可以支持几百个连接。如果你想有几千个,你应该考虑使用连接池软件来减少连接开销。
看看到底是谁/什么/何时/何地在保持您的联系:
当前使用的连接数为:
调试策略
1.您可以为可能没有释放连接的程序给予不同的用户名/密码,以找出是哪一个,然后查看pg_stat_activity以找出哪一个没有在自己之后进行清理。
1.当无法创建连接时,执行完整的异常堆栈跟踪,并按照代码返回到创建新
Connection
的位置,确保创建连接的每一个代码行都以connection.close();
结尾如何将max_connections设置得更高:
conf中的max_connections设置了到数据库服务器的最大并发连接数。
1.首先找到postgresql.conf文件
1.如果您不知道它在哪里,请使用sql:
SHOW config_file;
1.我在:
/var/lib/pgsql/data/postgresql.conf
1.以root身份登录并编辑该文件。
1.搜索字符串:“最大连接数”。
1.您将看到一行
max_connections=100
。1.将该数字设置得更大,重新启动postgresql数据库。
最大max_connections是多少?
使用此查询:
我得到的值是
8388607
,所以理论上这是允许的最大值,但是一个失控的进程可能会消耗掉数千个连接,令人惊讶的是,数据库直到重新启动才有响应。如果你有一个合理的max_connections,比如100,那么违规的程序将被拒绝建立新的连接,数据库是安全的。axkjgtzd2#
我们不知道 * server.properties * 文件是什么,也不知道 SimocoPoolSize 是什么意思(您知道吗?)
假设您使用的是某个自定义的数据库连接池。那么,我猜问题是您的连接池被配置为打开100或120个连接,而Postgresql服务器被配置为接受
MaxConnections=90
。这些设置似乎是冲突的。请尝试增加MaxConnections=120
。但是,如果您确实需要在池中使用这么多打开的连接,尤其是如果您要将打开的连接正常地返回到池中,那么您应该首先了解您的数据库层基础结构,知道您使用的是什么池
8zzbczxx3#
不需要增加MaxConnections和InitialConnections。完成工作后关闭连接即可。例如,如果您正在创建连接:
完成工作后关闭连接:
tvmytwxo4#
有问题的行如下:
您可以增加值以允许更多连接。
pinkon5k5#
您需要关闭所有连接,例如:如果使用INSERT INTO语句,则需要以以下方式关闭语句和连接:
如果你使用SELECT语句,你需要关闭语句、连接和结果集,方法如下:
我这么做了,而且成功了