PostgreSQL 16.2(AIX+PowerHA)出现“Resource temporarily unavailable”问题求助
关于PostgreSQL 16.2在AIX PowerHA环境下连接报错的排查与解决思路
服务器环境:配置PowerHA的AIX服务器,源码编译安装PostgreSQL 16.2;硬件为64GB内存、1颗Power10(s1024)处理器;日常内存平均占用20GB、CPU占用30%;部署5个小型数据库(最大仅数GB),存在大量客户端同时连接场景。
高峰时段PostgreSQL日志出现错误:could not fork new process for connection: Resource temporarily unavailable
但系统日志与性能数据未显示资源饱和。
现有配置信息
PostgreSQL内存相关配置
- Memory - shared_buffers = 1GB # min 128kB # (change requires restart) #huge_pages = try # on, off, or try # (change requires restart) #huge_page_size = 0 # zero for system default # (change requires restart) #temp_buffers = 8MB # min 800kB #max_prepared_transactions = 0 # zero disables the feature # (change requires restart) # you actively intend to use prepared transactions. work_mem = 16MB # min 64kB #hash_mem_multiplier = 2.0 # 1-1000.0 multiplier on hash table work_mem maintenance_work_mem = 16MB # min 1MB #autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem #logical_decoding_work_mem = 64MB # min 64kB #max_stack_depth = 2MB # min 100kB
系统ulimit配置
core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max memory size (kbytes, -m) unlimited open files (-n) unlimited pipe size (512 bytes, -p) 64 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited
解决思路
- 检查AIX系统进程限制:虽然
ulimit -u显示unlimited,但AIX的系统级全局进程参数maxuproc(可通过lsattr -E -l sys0 -a maxuproc查看)、或是/etc/security/limits中针对postgres用户的单独进程限制,都可能在高峰时触达阈值,需确认后调整。 - 优化PostgreSQL连接配置:检查
max_connections参数(当前配置未提供),该值决定最大并发连接数,过高会导致fork进程时触发系统隐式资源限制。结合硬件建议调整至合理范围,同时搭配pgbouncer连接池减少实际fork的进程数量。 - 调整内存配置与AIX内核参数:当前
shared_buffers仅1GB,64GB内存环境可调高至8-12GB,减少子进程私有内存占用;检查AIX的vmo参数,确保有足够虚拟内存预留,避免fork时临时内存不足。 - 排查PowerHA资源限制:PowerHA可能对资源组内的进程数、内存有额外管控规则,需检查PowerHA资源配置,确认是否在高峰或切换场景下限制了postgres的资源使用。
- 验证编译兼容性:源码编译PostgreSQL时,需确认是否添加了针对Power10与AIX的适配参数(如
--with-aix),若缺少必要系统库或优化参数,可能导致fork操作异常,可尝试重新编译。 - 高峰时段实时监控:用
ps -ef | grep postgres | wc -l统计实时postgres进程数,搭配vmstat、iostat监控瞬时资源波动,排查是否有被平均数据掩盖的瞬时资源瓶颈。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

