2017-09-10 4 views
0

Mongoにlargish(コレクションごとに80kのコレクション、200kの文書)データベースを作成しています。私がデータベースに文書をプッシュし始めると、〜800kの挿入後に次のエラーが発生します。mongodbに文書を挿入するときに「開いているファイルが多すぎます」というエラーが発生しました

pymongo.errors.WriteError: 24: Too many open files 

私はまともなサイズのサーバー(2つのvCPU、32 GB RAM)を持っています。ファイルオープンの場合はulimitが無制限に設定されています。 /etc/init/mongodb.confにはlimit nofile 999999 999999が設定されています。

ファイル挿入スクリプトでsleep(mongodbが少し後にファイルを閉じることを期待しています)を挿入しようとしましたが、それでも役に立たなかった。動作する唯一のことは、挿入が失敗した後でMongodbを再起動することです。その後、プロセスを再開できます。

mongodbを数千回挿入して再起動すると、挿入処理を一時停止することなく、どのようにして挿入処理を改善できますか? (簡潔にするために、私は文書を簡略化している。実際の文書は約20のデータポイントを有する

while (redis_conn.llen(redis_key) > 0) : 
      redis_json = redis_conn.lpop(redis_key) 
      json_doc = json.loads(redis_point) 
      collection_name = json_doc['collection_name'] 
      collection = mongodb[collection_name] 
      document = { '1' : json_doc['1'], '2' : json_doc['2'] } 
      mongo_write_response = collection.insert_one(document) 

をモンゴするのRedisからデータポイントを転送しているPythonスクリプトを共有


+0

あなたのコードに関連している場合は、それを表示することもできます。 –

+0

mongodbのどのバージョンですか?そして 'mmapv1'や' wiredTiger'を使っていますか? –

+0

@RobertSeaman - v3.4 with WT ...質問のコードの一部も追加されました。 – pradyotghate

答えて

1

問題Debian 9を使っていて、apt-getを使って、OSにバンドルされているMongoDBのバージョンをインストールしました。

MongoDBのドキュメントではまだDebian 9をサポートしていないと言われているので、OSをDebian 8にダウングレードし、MongoDBコミュニティ版をdocumentationとしてインストールしました。今すぐうまくいきます:)

関連する問題