web-dev-qa-db-fra.com

mongorestore Trop de fichiers ouverts

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).

5
Wylliam Judd

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.

7
Niraj Adhikary

À 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é.

  1. Vous voudrez peut-être configurer votre limit de la manière mentionnée ici .
  2. Redémarrez (en supprimant ces descripteurs de fichiers).
  3. Vérifiez que les limites sont bonnes
  4. Réessayer.
0
Evan Carroll

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.

0
JJussi