web-dev-qa-db-ja.com

mongorestore開いているファイルが多すぎる

mongorestoreを実行すると、error running create command: 24: Too many open filesが表示されます。

Launchctlの制限とulimitを更新しました。

lanchctl limitを実行すると、次のようになります。

cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     709            1064           
maxfiles    256000         256000

ulimit -aを実行すると、次のようになります。

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256000
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

私のmongoバージョンは3.4.7です

私のmacOSは10.13.2です

Mongorestoreを完了するにはどうすればよいですか?

また、言及する価値があります。コンピュータからログアウトしたり再起動したりせずにmongorestoreを複数回実行しようとすると、cannot make pipe for command substitution: Too many open filesが表示され、コンピュータがクラッシュします(これは2017年8月現在の新しいiMacです)。

5
Wylliam Judd

ulimitは、ulimit -n 10000によって同じ端末で設定できます。

/etc/security/limit.confファイルの値をnofilesで10000に変更できます#line

どのlinux/unixシステムでも開くことができるファイルの最大数は64000です。この数を確認してください。データベースのサイズの復元が非常に大きい場合は、データベースの作成のように、それらをより小さな断片にして、一度に1つまたはいくつかのコレクションを復元してみてください。 RAM)の4/8 GBのようなメモリ制限がある場合は、データベース全体ではなく、コレクションごとに復元することをお勧めします。

ローカルシステムからmongorestoreを試行しているので、これは本番システムではなく、深刻なビジネスではないと思います。私の仮定が正しい場合は、一度にいくつかのコレクションを復元して、同じ問題が引き続き発生するかどうか確認してください。

ソリューションを共有してくれて、@ wylliam-juddに感謝します。 Linuxをリモートホストとして使用し、PuTTYから同じウィンドウでアクセスしたため、この問題に直面することはありませんでした。とにかく私は他の人を助けるためにあなたの解決策を追加しています

解決策は、mongorestoreを実行しているコンソールではなく、mongodを実行しているコンソールでulimit -n 64000を実行することでした。安全のために両方のコンソールで実行しましたが、 mongorestoreコンソールのulimitが必要かどうかわからない。この数か月間に他の多くの解決策も試みたが、どれも影響がないかどうかは完全にはわからないが、最終的に重要な違いが実行されていたmongodを実行しているコンソールのulimit

7
Niraj Adhikary

また言及する価値があります:コンピュータからログアウトしたり再起動せずにmongorestoreを複数回実行しようとすると、コマンド置換のためのパイプを作成できません:開いているファイルが多すぎてコンピュータがクラッシュします(これは2017年8月現在の新しいiMacでした) 。

それは問題のように聞こえますが、それは、ファイルハンドルを所有するプロセスが強制終了されたときに、カーネルがファイルハンドルを取得していないことを意味します。

  1. ここで述べた方法でulimit を設定することもできます。
  2. 再起動します(これらのファイルハンドルを強制終了します)。
  3. 制限が正しいことを確認してください
  4. 再試行。
0
Evan Carroll

チャンクは(キーの)範囲情報にすぎません。チャンク単位での復元はできません。 ulimit値(制限)はユーザーベースです。したがって、復元に使用するユーザーIDに、より高いオープンファイル値を与える必要があります。

0
JJussi