Minha instância do postgresql continua gerando esse erro e ele desaparece temporariamente depois que reinicio o banco de dados.
Aqui estão os registros:
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
Aqui está minha configuração:
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
Tenho 32 GB de RAM, 32 vCPU e 10 GB de armazenamento. Tentei ajustar essas configurações, mas não tive esperança. Há algo errado aqui?
As mensagens de erro indicam
EAGAIN
. De acordo com afork()
página do manual, isso significa:Geralmente, é o primeiro limite. Você teria que aumentar o
ulimit
para o processo postmaster. A melhor forma de fazer isso depende de como você inicia o servidor PostgreSQL. Você pode ver o limite em/proc/<postmaster PID>/limits
"Processos máximos".A causa provável de você estar atingindo esse limite é que você está permitindo muitas conexões de cliente. Embora aumentar o limite elimine o erro, você terá outros problemas, e seria melhor ter um pool de conexões de tamanho razoável.
Quando você aumenta,
max_parallel_workers
você também tem que aumentar,max_worker_processes
pois os trabalhadores paralelos são retirados do conjunto de processos de trabalho.Além disso, seu
work_mem
parece um pouco alto e um monte de conexões pode facilmente consumir toda a memória do seu sistema.work_mem
é aplicado a trabalhadores individuais, então uma configuração mais alta para trabalhadores paralelos novamente leva a mais utilização de memória. Eu sugiro que você encontre um valor ótimo parawork_mem
emax_parallel_workers_per_gather
com base em suas necessidades de consulta.