2012-02-20 24 views
1

私たちのプロジェクト用にapiサーバを作ろうとしています。pymongoが接続を終了していません

私たちは、debianボックスでpongongoでmongodbを使用しています。 everyhtingは までです。

しかし、私たちは本当に奇妙な接続の問題を抱えています。// netstat -na |通常、mongodbポートに15k-32kを超える接続があります。 と

ルート@ webserver1:/#netstat -na | grep mongo_db_ip | ...

我々私は15363の

接続が... TIME_WAIT状態で

ありましたが、私はMongoのを確認したときに、私は現時点では5-6の接続を参照してくださいトイレ-l

インスタンスを作成して に接続するmongodbクラスを作成しました。我々は、コールconn.disconnect()またはconn.end_request() 毎回クエリの終了を試みたが、私のミスであるか、またはどうあるべきか伝えることができ、誰もがそこに任意のある高い接続 数...

があることが立ち止まっていません他の人がそのよう ものとして作る方法を検討するMongoDBのための 書かれたPythonクラス...

助けてくれてありがとう、との情報...

+0

リクエストごとに新しい接続を作成する代わりに、接続プールまたはbit.lyのasyncmongoをチェックアウトすることができます。 – user500198

答えて

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秒に減らします。

しかし、あなたは非常に多くの接続を行っている理由を確認する必要があります。あなたはmongodとpymongoにDebianパッケージを使っていると言いますが、それらは古くなってしまいがちです。あなたは本当にmongod 2.0.2とpymongo 2.1.1を実行したいと思っています。

+0

私はtcp_fin_timeoutの変更がTIME_WAITタイムアウトに影響するとは思わない。何らかの理由で、Linuxではこの値はカーネルにハードコードされています(2分前)、動的に変更することはできません。 –

関連する問題