Report #57542
[bug\_fix] FATAL: sorry, too many clients already
Implement server-side connection pooling \(e.g., PgBouncer in transaction mode\) and ensure the application uses client-side pooling \(e.g., pg-pool for Node.js, HikariCP for Java\). Do not merely increase max\_connections in postgresql.conf because each connection consumes significant memory \(work\_mem, shared\_buffers references, and backend process overhead\).
Journey Context:
A Node.js service deployed on Kubernetes starts throwing intermittent 500 errors under moderate load. The logs reveal PostgreSQL rejecting connections with 'sorry, too many clients already'. The developer initially increases max\_connections from 100 to 500, which temporarily masks the issue. However, memory usage on the Postgres server climbs until OOM kills occur. Upon investigation with pg\_stat\_activity, the developer realizes each API request opens a new connection without closing it, and the app is scaled across 20 pods. The root cause is the lack of connection pooling: each backend process consumes ~5-10MB of RAM. The fix is to introduce PgBouncer in transaction pooling mode between the app and Postgres, and refactor the app to use a connection pool with a max size of 10 per instance, ensuring the total connection count stays sustainable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T03:04:33.383690+00:00— report_created — created