Lorsque j'exécute mongorestore
j'obtiens error running create command: 24: Too many open files
.
J'ai mis à jour ma limite launchctl et ulimit.
Quand je lance lanchctl limit
Je reçois:
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
Quand je lance ulimit -a
Je reçois:
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
Ma version mongo est 3.4.7
Mon macOS est 10.13.2
Comment puis-je terminer mongorestore?
À noter également: si j'essaie d'exécuter mongorestore
plus d'une fois sans me déconnecter de l'ordinateur ou redémarrer, j'obtiens cannot make pipe for command substitution: Too many open files
et mon ordinateur tombe en panne (il s'agissait d'un tout nouvel iMac d'août 2017).
ulimit peut être défini dans le même terminal par ulimit -n 10000;
Vous pouvez changer la valeur dans le fichier /etc/security/limit.conf par nofiles à 10000 #line
le nombre maximum de fichiers pouvant être ouverts dans n'importe quel système linux/unix est 64000. assurez-vous de ce non. Si votre restauration de la taille de la base de données est énorme, essayez de les réduire en morceaux, comme créez la base de données, puis essayez de restaurer une ou plusieurs collections à la fois. Si vous avez une limite de mémoire comme 4/8 Go de RAM alors il vaut mieux restaurer la collection par collection au lieu de la base de données entière.
Comme vous essayez mongorestore à partir du système local, je crois que ce n'est pas un système de production et pas une entreprise sérieuse, si mon hypothèse est correcte, essayez de restaurer quelques collections à la fois et voyez si vous rencontrez toujours le même problème.
Merci @ wylliam-judd pour avoir partagé la solution; Je n'ai pas fait face à ce problème car j'ai utilisé Linux comme hôte distant et j'ai accédé à partir de PuTTY et dans la même fenêtre; de toute façon j'ajoute votre solution pour aider les autres
La solution était d'exécuter ulimit -n 64000 dans la console exécutant mongod plutôt que dans la console exécutant mongorestore. Bien que je l'ai exécuté sur les deux consoles pour être sûr, et je peux Je ne sais pas si l'ulimit dans la console mongorestore était nécessaire ou non. J'ai également essayé de nombreuses autres solutions au cours de ces mois, et je ne peux pas être entièrement sûr qu'aucune d'entre elles n'a eu d'impact, mais la différence qui importait finalement était en cours d'exécution ulimit dans la console exécutant mongod.
À noter également: si j'essaie d'exécuter mongorestore plus d'une fois sans me déconnecter de l'ordinateur ni redémarrer, je ne peux pas créer de canal pour la substitution de commandes: trop de fichiers ouverts et mon ordinateur se bloque (il s'agissait d'un tout nouvel iMac en août 2017) .
Cela ressemble à un problème, cela signifie que votre noyau ne recueille pas les descripteurs de fichiers lorsque le processus qui les possède est tué.
Les morceaux ne sont que des informations de plage (de clé). Vous ne pouvez pas effectuer de restauration par morceaux. Les valeurs ulimit (limites) sont la base d'utilisateurs. Donc, vous devez donner une valeur plus élevée aux fichiers ouverts à cet ID utilisateur que vous utilisez pour la restauration.