mongodb - 使用 mgo 驱动程序,Mongodb 连接计数每 10 秒增加一个

标签 mongodb go mgo connection-leaks

我们使用这个监控我们的 mongoDB 连接数:

http://godoc.org/labix.org/v2/mgo#GetStats

但是,我们一直面临着一个奇怪的连接泄漏问题,即 connectionCount 每 10 秒持续增加 1 个打开的连接。 (这与是否有任何请求无关)。我可以在 localhost 中启动服务器,将其留在那里,什么也不做,连接计数仍会逐渐增加。连接数最终会增加到几千,然后它会杀死应用程序/数据库,我们必须重新启动应用程序。

这可能不足以让您进行调试。有没有人有任何想法,您过去处理过的连接泄漏。你是怎么调试的?我可以通过哪些方式对此进行调试。

我们已经尝试了一些东西,我们扫描了我们的代码库,寻找任何可以打开连接并将计数器/调试语句放在那里的代码,到目前为止我们没有发现任何泄漏。这几乎就像图书馆某处发生泄漏。

这是我们一直在研究的分支中的一个错误,并且已经有数百次提交。我们已经在 this 和 master 之间进行了比较,但找不到此分支中存在连接泄漏的原因。

例如,我正在引用的数据集:

Clusters:      1   
MasterConns:   9936      <-- creeps up 1 per second
SlaveConns:    -7359     <-- why is this negative?
SentOps:       42091780   
ReceivedOps:   38684525   
ReceivedDocs:  39466143   
SocketsAlive:  78        <-- what is the difference between the socket count and the master conns count?
SocketsInUse:  1231   
SocketRefs:    1231

MasterConns 是每 10 秒爬升一个的数字。我不完全确定其他数字的含义。

最佳答案

MasterConns 无法告诉您是否存在泄漏,因为它不会减少。该字段指示自上次统计信息重置以来建立的连接数,而不是当前正在使用的套接字数。后者由 SocketsAlive 字段指示。

为了让您对这个主题有更多的了解,mgo 套件中的每个测试都围绕逻辑进行包装,以确保统计数据在测试完成后显示合理的值,这样潜在的泄漏就不会被忽视。这就是引入这种统计收集系统的主要原因。

然后,您看到此数字每 10 秒左右增加一次的原因是由于恰好了解集群状态的内部事件。也就是说,此行为最近已更改,因此它不会建立新连接,而是从池中选择现有套接字,因此我相信您使用的不是最新版本。

SlaveConns 为负值看起来像是一个错误。关于所建立连接的统计信息收集有一个小的边缘案例,因为在我们与它交谈之前我们无法判断给定服务器是主服务器还是从服务器,因此可能存在未发现的路径。如果您在升级后仍然看到该行为,请报告该问题,我们很乐意查看。

SocketsInUse 是仍然被一个或多个 session 引用的套接字数量,无论它们是否处于事件状态(连接已建立)。 SocketsAlive 是实时 TCP 连接的实际数量。两者之间的增量表明许多 session 未关闭。这可能没问题,如果它们仍由应用程序保留在内存中并最终将被关闭,或者如果应用程序错过了 session.Close 操作,则可能是泄漏。

关于mongodb - 使用 mgo 驱动程序,Mongodb 连接计数每 10 秒增加一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19455787/

相关文章:

node.js - findOne NodeJS MongoDB 驱动程序

javascript - Golang html模板无法调用html文件中的javascript文件

mongodb - 从Golang中的bson.M中过滤出值

mongodb - Find 函数的通用 map 是如何创建的?

mongodb - 插入 MongoDB 并存储 ObjectID?

node.js - Passport.js - 使用 Passport-local 对来自 MongoDB 的用户进行身份验证

javascript - Joi 在验证 mongoose 对象时抛出错误 -

xml - 在 Go 中构建 MRSS 提要

go - 接受 map 参数

mongodb - Golang,mgo 为用户更新详细信息