2012-02-20 105 views
1

我们正在尝试为我们的项目制作api服务器。pymongo未关闭连接

我们在debian盒子上使用了pongongo的mongodb。每日最高可达 。

但我们有一个非常奇怪的连接问题。有 一般超过15k-32k连接到mongodb端口当我检查 与

root @ webserver1:/#netstat -na | grep mongo_db_ip |厕所-l

我得到了15363个

连接处于TIME_WAIT状态......

,但是当我检查蒙戈,我只看到5-6连接的那一刻...

我们写了一个mongodb类,它创建了一个实例并使得连接成为 。我们试图调用conn.disconnect()或conn.end_request() 每次查询结束,但它不是采空高连接 数...

有没有人能告诉我应该是我的错误,或者是还有什么 MongoDB的书面Python类研究别人怎么做,如 东西...

感谢您的帮助和信息...

+0

您可能希望检出连接池或bit.ly的asyncmongo,而不是与每个请求建立新的连接。 – user500198 2012-02-20 05:59:05

回答

2

TIME_WAIT不是一个打开的连接。这是一个套接字的操作系统状态,因此它可以确保所有数据都已经通过。 AFAIK,这在Linux上的默认长度是一分钟。看看http://antmeetspenguin.blogspot.com/2008/10/timewait-in-netstat.html,它有很好的解释。您可以告诉内核重新使用TIME_WAIT套接字:

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

将其减少到30秒。

但是,你应该检查你为什么做这么多的连接。你说你正在使用Debian软件包来做mongod和pymongo,它们往往是过时的。你真的想运行mongod 2.0.2和pymongo 2.1.1。

+0

我不认为改变tcp_fin_timeout会影响TIME_WAIT超时。由于某些原因,在Linux中,这个值被硬编码到内核中(我认为2分钟)并且不能动态更改。 – 2013-10-16 16:59:35