Report #16665
[bug\_fix] FATAL: sorry, too many clients already
Implement a connection pooler \(PgBouncer in transaction mode\) or increase max\_connections with corresponding kernel semaphore limits \(kernel.shmmax, shmall\). More importantly, ensure the application uses persistent connection pooling \(e.g., HikariCP, pg-pool, SQLAlchemy pool\) rather than opening/closing connections per request.
Journey Context:
Under production load, the application starts throwing connection errors. Checking PostgreSQL logs reveals FATAL: sorry, too many clients already. Querying pg\_stat\_activity shows hundreds of idle connections from application instances, each taking a backend process. The root cause is that each application server is creating new physical connections for every request instead of reusing them from a pool, quickly exhausting the default 100 max\_connections. The debugging path involves checking active connections, verifying connection pool configuration \(or lack thereof\), and realizing that the default max\_connections is too low for the number of application instances multiplied by their connection count. The fix requires implementing PgBouncer as a sidecar or middleware to multiplex thousands of application connections onto a smaller pool of actual PostgreSQL backends, or properly configuring the application's built-in connection pool with appropriate min/max sizes, and tuning max\_connections up while ensuring the OS kernel semaphore limits \(SEMMSL, SEMMNS, SEMOPM, SEMMNI\) are increased via sysctl to support the higher connection count.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T03:16:50.048148+00:00— report_created — created