2

私は MRI 1.9.3 で Sidekiq を実行しており、MongoMapper を ORM として使用しています。

私のSidekiqワーカーは、次の例外を除いて頻繁に死んでいます:

Mongo::ConnectionTimeoutError: could not obtain connection within 15.0 seconds. 
The max pool size is currently 40; consider increasing the pool size or timeout.

Sidekiq は、同時実行レベル 30 で実行するように構成されています。

ご覧のとおり、Mongo 接続プールを 40 に設定し、タイムアウトを 15 秒に設定しました。これにより、すべてのアクティブな Sidekiq スレッドに対して十分な数の mongo 接続が得られるはずです。

ただし、この例外は頻繁に発生し、特にアクティブなワーカーの数が最大に近づいた場合に発生します。

Sidekiq wiki の Mongoid に関して、これについて何か言及されているのを見たことがあります: https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#too-many-connections-to-mongodb

ただし、Mongoid は MongoMapper とは異なる mongo ドライバーを使用するため、kiqstand ミドルウェアは役に立ちません。

MongoMapper は、スレッドセーフで接続プールを採用する公式の mongo ドライバーを使用します。

スレッドの終了時に MongoMapper 接続を解放するには、Sidekiq サーバー ミドルウェアで何が必要ですか?

4

0 に答える 0