
PostgreSQL 9.4 サーバーを使用していますが、max_connections で定義した数よりも少ない接続数に制限されているようです。
max_connections を 300 に設定しました。
SHOW max_connections;
max_connections
-----------------
300
しかし、アクティブな接続が100に達するとすぐに新しい接続がタイムアウトし始めることがわかりました。SELECT count(*) from pg_stat_activity;
その数が 100 未満であれば、新しい接続は機能します。100 に達すると、新しい接続は失敗します: PG::ConnectionBad: could not connect to server: Connection timed out
(Ruby pg ライブラリ)
スーパーユーザー接続 (つまり、PgAdmin 経由で接続する) には例外があるようです。その方法では 100 のしきい値を超えることができますが、スーパーユーザーを使用しないアプリは引き続きタイムアウトします。
根本的な原因が何なのか正確にはわかりません。
いくつかの構成設定:
max_connections = 300
superuser_reserved_connections = 2
shared_buffers = 1024MB
effective_cache_size = 2048MB
work_mem = 8MB
maintenance_work_mem = 256MB
これらの値を少しいじってみましたが、効果はありませんでした。
その他の情報:
- Ubuntu 14.04 64ビット
- 4GB Linode VPS
- PostgreSQL 9.4.1
- PostgreSQL 9.2 では基本的に同じ構成でこの問題は発生しませんでした。
- データベースはpg_dumpall経由でPostgres 9.2から移行されました
- メモリ使用量は問題ではないようです。
free
空き容量は 2.1 GB、バッファ/キャッシュを含めると 3.5 GB です。 - 接続は、さまざまなデータベースへのさまざまなロール用であり、個々の DB には 5 つまたは 6 つを超えるアクティブな接続はなく、各 DB は独自の個別のロールによってアクセスされています。個々の DB またはロールの接続制限に違反しているようには見えません。
答え1
カーネルの最大セグメント サイズも増やしましたか?
試す:
sysctl -w kernel.shmmax=1258291200