Report #9497
[bug\_fix] FATAL: sorry, too many clients already
Configure a connection pooler \(e.g., PgBouncer in transaction mode\) between the application and Postgres, or reduce the application's connection pool size \(e.g., in Django's CONN\_MAX\_AGE or SQLAlchemy's pool\_size\) to ensure total connections across all app instances remain below Postgres's max\_connections \(default 100\).
Journey Context:
You deploy your Node.js app with PM2 clustering across 4 instances, each with a Sequelize pool size of 20. Under load, users start seeing "sorry, too many clients already" and 500 errors. You check \`SELECT count\(\*\) FROM pg\_stat\_activity;\` and see 100\+ idle connections. You realize each Node process creates 20 connections, 4 processes = 80, plus monitoring tools and background workers push it over 100. You try raising max\_connections to 200 in postgresql.conf, but the kernel won't allow more shared memory, and you don't want to reboot. You investigate PgBouncer, set it up in transaction pooling mode with max\_client\_conn=1000 and default\_pool\_size=20, point your app at PgBouncer instead of Postgres directly, and the errors stop because PgBouncer multiplexes thousands of application connections onto a small pool of actual Postgres backends.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T08:18:27.930241+00:00— report_created — created