私は 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 サーバー ミドルウェアで何が必要ですか?