我的 postgresql 实例不断抛出此错误,在我重新启动数据库后该错误暂时消失。
这是日志:
ERROR: parallel worker failed to initialize
2025-02-25 21:00:51.586 UTC [668] HINT: More details may be available in the server log.
2025-02-25 21:00:51.586 UTC [668] STATEMENT: ...some sql query
2025-02-25 21:00:51.663 UTC [5] LOG: could not fork worker process: Resource temporarily
这是我的配置:
shared_buffers = '8GB'
work_mem = '512MB'
maintenance_work_mem = '2GB'
effective_cache_size = '16GB'
max_parallel_workers_per_gather = 8
max_parallel_workers = 32
autovacuum_work_mem = '1GB'
vacuum_cost_limit = 1000
autovacuum = on
我有 32GB 内存、32vCPU 和 10GB 存储空间。我尝试调整这些设置,但没有效果。我是不是搞错了什么?
错误消息表明
EAGAIN
。根据fork()
手册页,这意味着:通常,这是第一个限制。您必须增加postmaster 进程。如何最好地做到这一点取决于您如何启动 PostgreSQL 服务器。您可以在“最大进程数”下
ulimit
看到限制。/proc/<postmaster PID>/limits
您达到该限制的可能原因是您允许的客户端连接数过多。虽然增加限制可以消除错误,但您仍会遇到其他问题,因此最好使用合理大小的连接池。
当你增加时,
max_parallel_workers
你也必须增加max_worker_processes
,因为并行工作者是从工作进程池中获取的。此外,您的
work_mem
设置似乎有点高,而且一堆连接很容易耗尽您的所有系统内存。work_mem
应用于单个工作器,因此并行工作器的更高设置再次导致更多的内存利用率。我建议您根据查询需求找到work_mem
和的最佳值。max_parallel_workers_per_gather