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 驱动程序,该驱动程序应该是线程安全的并使用连接池。

当线程完成时,Sidekiq 服务器中间件需要做什么来释放 MongoMapper 连接?

4

0 回答 0