多次会话后mgo连接泄漏。复制()

时间:2015-04-13 14:13:58

标签: mongodb http session go mgo

我正在使用MongoDB作为数据库并使用mgo作为驱动程序在Go中编写REST API。 对于路由器,我使用的是客户:pi

在程序启动时,我创建了一个主mgo.Session,然后,对于每个处理的请求,我复制主会话并在完成后关闭它。

但是,当同时处理多个请求时,我发现MongoDB连接仍然打开,即使我关闭了每个复制的mgo.Session。

以下是lsof命令的输出示例:

milano-ru 18790 neel_v  118u  IPv4 34115804      0t0     TCP localhost:44238->localhost:27017 (ESTABLISHED)
milano-ru 18790 neel_v  119u  IPv4 34115812      0t0     TCP localhost:44241->localhost:27017 (ESTABLISHED)
milano-ru 18790 neel_v  120u  IPv4 34115813      0t0     TCP localhost:44242->localhost:27017 (ESTABLISHED)
milano-ru 18790 neel_v  121u  IPv4 34115814      0t0     TCP localhost:44243->localhost:27017 (ESTABLISHED)
milano-ru 18790 neel_v  122u  IPv4 34115815      0t0     TCP localhost:44244->localhost:27017 (ESTABLISHED)

因此,在我的应用程序运行几个小时之后,它停止工作,因为它无法打开另一个MongoDB连接,因为达到了限制(1024)。

我读过关于增加MongoDB ulimit的内容,但它真的是一个解决方案吗?

1 个答案:

答案 0 :(得分:1)

我同时感到心烦意乱,但在我发布问题后我立即找到答案了......

在检查mgo会话后,我可以看到拨号设置,默认情况下maxPoolSize为4096 ...尝试减小池大小后,它解决了我的问题。