2012-02-20 104 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