Bug之nested exception is org.postgresql.util.PSQLException: FATAL: sorry, too many clients already

本文介绍如何解决PostgreSQL数据库连接数过多的问题,通过编辑postgresql.conf文件中的max_connections参数来增加最大连接数,并重启数据库使更改生效。

PostgrSQL的连接数过多,修改一下默认的连接数

https://stackoverflow.com/questions/2757549/org-postgresql-util-psqlexception-fatal-sorry-too-many-clients-already

  1. First find your postgresql.conf file
  2. If you don’t know where it is, query the database with the sql: SHOW config_file;
  3. Mine is in: /var/lib/pgsql/data/postgresql.conf
  4. Login as root and edit that file.
  5. Search for the string: “max_connections”.
  6. You’ll see a line that says max_connections=100.
  7. Set that number bigger, check the limit for your postgresql version.
  8. Restart the postgresql database for the changes to take effect.
您遇到的错误信息: ``` nested exception is org.postgresql.util.PSQLException: ERROR: memory is temporarily unavailable ``` 表示您的应用程序在尝试通过 JDBC 连接 PostgreSQL 数据库执行操作时,PostgreSQL 抛出了一个错误:**“memory is temporarily unavailable”(内存暂时不可用)**。 --- ### 📌 错误原因分析: 该错误通常发生在 **PostgreSQL 数据库端**,意味着数据库在处理当前请求时无法分配足够的内存。常见原因包括: 1. **数据库内存不足**: - PostgreSQL 配置的 `work_mem`、`shared_buffers`、`maintenance_work_mem` 等内存参数设置过低。 - 当前执行的查询(如大表排序、哈希连接、大量数据插入/更新)需要更多内存资源。 2. **并发请求过高**: - 同时执行大量查询或事务,导致内存资源争用。 3. **查询过于复杂或未优化**: - 比如全表扫描、大范围的 `JOIN` 或 `ORDER BY` 操作,没有合适的索引支持。 4. **系统资源限制(Linux)**: - 操作系统层面的内存或 swap 使用已达上限。 - SELinux、AppArmor 等安全机制限制了内存访问。 5. **JDBC 批量操作过大**: - 如果是通过 Java 应用程序批量插入或更新数据,一次性提交的数据量太大也可能导致数据库内存不足。 --- ### ✅ 解决方案建议: 1. **优化 SQL 查询**: - 添加合适的索引。 - 避免全表扫描或不必要的大数据量排序。 - 分页处理大数据集。 2. **调整 PostgreSQL 内存配置**(在 `postgresql.conf` 中): ```conf shared_buffers = 2GB work_mem = 64MB maintenance_work_mem = 512MB ``` 根据服务器物理内存适当调整。 3. **限制并发连接数**: - 使用连接池(如 HikariCP)并限制最大连接数。 - 设置 `max_connections` 以避免资源耗尽。 4. **检查系统资源使用情况**: - 使用 `top`, `htop`, `free -h`, `vmstat` 等命令查看内存和交换分区使用情况。 5. **分批次处理数据(适用于 JDBC 批量操作)**: ```java int batchSize = 500; for (int i = 0; i < dataList.size(); i++) { insertData(dataList.get(i)); if (i % batchSize == 0) { connection.commit(); } } ``` --- ### 📚 示例:调整 PostgreSQL 内存参数 ```bash # 编辑 postgresql.conf sudo nano /etc/postgresql/<version>/main/postgresql.conf # 修改如下参数(根据服务器内存调整) shared_buffers = 2GB work_mem = 64MB maintenance_work_mem = 512MB ``` 保存后重启 PostgreSQL: ```bash sudo systemctl restart postgresql ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值