0

私は得ています

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5 seconds (waited 5.000798 seconds). The max pool size is currently 1; consider increasing it.)

プールサイズ1でWEBrick(レールサーバー)を実行しようとすると、プールサイズが大きくても問題ありません。

WEBrick が最初の接続を使用するのは何ですか? また、シングルスレッド アプリケーションに最適なプール サイズはどれくらいですか? これは WEBrick 固有の問題ですか、それとも他のサーバー (Unicorn など) にも当てはまりますか?

Rails のバージョンは 3.2.13 です

アップデート。これをユニコーンで検証したところ、単一の接続で正常に動作します。

4

1 に答える 1

2

私の記憶が正しければ、Rails は起動時にデータベースへの接続を予約し、接続プールで使用可能な残りの接続を使用してリクエストを処理します。リクエストの存続期間中に ActiveRecord オブジェクトにまったく触れなくても、Rails はリクエストごとにプールから 1 つの接続を予約しようとするか、タイムアウト制限まで接続が使用可能になるまでブロックします。

デフォルトのプール サイズは 5 接続です。1 つは Rails 用に予約されており、4 つはリクエストに使用できます。

Rails は、アプリケーションでスレッドセーフを維持するためにこれを行います。

アプリケーションがシングルスレッドで、同時実行性を考慮せずに一度に 1 つの要求のみを処理する場合、プール内の接続数は絶対最小値で 2 に設定する必要があります。ただし、リクエストごとに複数の接続を利用する必要がある場合に備えて、余裕を持ってデフォルトの 5 をお勧めします。

これは WEBrick に固有のものではありません。接続プールの制限は、実行中のアプリケーション サーバーに関係なく、同じようにアプリケーションに影響を与えます。

于 2013-04-02T21:18:07.537 に答える