问题
我们的 mongodb 设置有一个奇怪的问题。有时我们会遇到高连接和高队列的峰值,如果我们让队列和连接增加,mongodb 进程就会停止响应。我们需要使用带有htop 的sigkill重新启动实例。
好像是系统限制/mongodb配置阻止mongodb运行,因为硬件资源没问题。此问题的版本发生在单机上,然后在生产服务器上设置副本。详情在前面。
关于软件环境
这是一个独立的 mongodb 实例(非分片或副本集),它在专用机器上运行,并由其他机器查询。我在 Debian 7.7 下使用 mongodb-linux-x86_64-2.6.12。
查询 mongo 的机器使用 Django==1.7.4、Mongoengine=0.10.1 和 pymongo==2.8、nginx 1.6.2 和 gunicorn 19.1.1。
在 Django settings.py 文件中,我使用以下几行连接到数据库:
from mongoengine import connect
connect(
MONGO_DB,
username = MONGO_USER,
password = MONGO_PWD,
host = MONGO_HOST,
port = MONGO_PORT
)
Run Code Online (Sandbox Code Playgroud)
彩信统计
正如您在 MMS 服务的以下 img 中看到的,我们在连接和队列上有峰值:

发生这种情况时,我们的 mongodb 进程完全冻结。我们必须使用SIGKILL来重启mongodb,这真的很糟糕。
图中有 3 个冻结事件。

正如 img 所示,当这种情况发生时,我们在非映射虚拟内存上也有一个峰值。

我们还发现 Btree 图表在第 2 次和第 3 次冻结前后有所增加。

我们检查了日志,但没有可疑的查询,而且 Opcounters 也没有暴涨,似乎没有比平时更多的查询。
在所有情况下,DB …