MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zu viele offene Dateien sorgen dabei für Index Mongo

Hinweis: Diese Lösung funktioniert/funktioniert möglicherweise nicht mit neueren Mac-Betriebssystemen (Kommentare geben>10.13 an?). Anscheinend wurden aus Sicherheitsgründen Änderungen vorgenommen.

Konzeptionell trifft die Lösung zu - im Folgenden einige Diskussionsquellen:

  • https://wilsonmar.github.io/maximum-limits/
  • https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
  • https://superuser.com/questions/433746/gibt-es-einen-fix-für-den-zu-vielen-offenen-dateien-im-systemfehler-auf-os-x-10-7 -1

--

Ich hatte das gleiche Problem (Ausführen einer anderen Operation, aber immer noch ein "Too many open files"-Fehler), und wie lese sagt, scheint es am 'maxfiles'-Limit auf dem Computer zu liegen, auf dem mongod ausgeführt wird.

Auf einem Mac ist es besser, die Limits zu überprüfen mit:

sudo launchctl limit

Das ergibt:

<limit name> <soft limit> <hard 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    1024           2048  

Was ich getan habe, um das Problem zu umgehen, war, das Limit vorübergehend höher zu setzen (meins war ursprünglich so etwas wie weich:256, hart:1000 oder so etwas Seltsames):

sudo launchctl limit maxfiles 1024 2048

Führen Sie dann die Abfrage-/Indizierungsoperation erneut aus und prüfen Sie, ob sie abbricht. Wenn nicht, und um die höheren Limits beizubehalten (sie werden zurückgesetzt, wenn Sie sich von der Shell-Sitzung abmelden, auf die Sie sie gesetzt haben), erstellen Sie eine '/etc/launchd.conf'-Datei mit der folgenden Zeile:

limit maxfiles 1024 2048

(oder fügen Sie diese Zeile Ihrer bestehenden launchd.conf-Datei hinzu, falls Sie bereits eine haben).

Dadurch wird die maxfile über launchctl auf jeder Shell beim Login gesetzt.