Mongo连接从未发布 - Django和Mongoengine在gevent上使用gunicorn

Dou*_*all 8 python django mongodb pymongo mongoengine

我有一个django应用程序使用mongoengine在gunicorn上运行gevent worker.在负载下,mongo连接数量攀升至约3千,并且永远不会下降.即使在负载测试完成后,mongo连接的数量也保持不变.重新启动gunicorn会释放连接.

包版本

gunicorn==0.17.4
mongoengine==0.8.7
pymongo==2.7
Run Code Online (Sandbox Code Playgroud)

mongodb 2.6.0

我在环境特定的django设置文件中有我的mongoengine连接设置:

MONGO_DATABASES = {
    'default': {
        'DB': '****',
        'HOST': ***********:27017',
        'PORT': 27017
    }
}

from gevent import monkey
monkey.patch_all()
from mongoengine import connect
connect(MONGO_DATABASES['default']['DB'], host=MONGO_DATABASES['default']['HOST'],       port=MONGO_DATABASES['default']['PORT'], max_pool_size=100)
Run Code Online (Sandbox Code Playgroud)

我需要做些什么才能确保最终释放未使用的连接?

谢谢,

道格

And*_*san 1

您正在寻找的功能是一个名为 的配置选项maxIdleTimeMS,该选项用于在负载峰值后进行清理(除其他外)。

根据文档:

maxIdleTimeMS - 套接字在关闭和丢弃之前可以在池中空闲的最长时间(以毫秒为单位)。对于负载峰值后的清理很有用。

遗憾的是,这个选项目前(2015 年 3 月)在 pymongo 驱动程序(mongoengine 在后台使用)中不可用,但它正在开发中!请参阅相关的 JIRA 票证(并且不要忘记对问题进行投票!)。它应该会在几个月内随 pymongo 3.1 一起提供。