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です)。
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
また言及する価値があります:コンピュータからログアウトしたり再起動せずにmongorestoreを複数回実行しようとすると、コマンド置換のためのパイプを作成できません:開いているファイルが多すぎてコンピュータがクラッシュします(これは2017年8月現在の新しいiMacでした) 。
それは問題のように聞こえますが、それは、ファイルハンドルを所有するプロセスが強制終了されたときに、カーネルがファイルハンドルを取得していないことを意味します。
チャンクは(キーの)範囲情報にすぎません。チャンク単位での復元はできません。 ulimit値(制限)はユーザーベースです。したがって、復元に使用するユーザーIDに、より高いオープンファイル値を与える必要があります。