2014-01-05 4 views
6

Ich möchte Textindex auf Mongo-Sammlung erstellen. Ich schreibeZu viele Dateien öffnen, während Index Mongo sicherstellen

db.test1.ensureIndex({'text':'text'}) 

und ich sah dann in mongod Prozess

Sun Jan 5 10:08:47.289 [conn1] build index library.test1 { _fts: "text", _ftsx: 1 } 
Sun Jan 5 10:09:00.220 [conn1]   Index: (1/3) External Sort Progress: 200/980 20% 
Sun Jan 5 10:09:13.603 [conn1]   Index: (1/3) External Sort Progress: 400/980 40% 
Sun Jan 5 10:09:26.745 [conn1]   Index: (1/3) External Sort Progress: 600/980 61% 
Sun Jan 5 10:09:37.809 [conn1]   Index: (1/3) External Sort Progress: 800/980 81% 
Sun Jan 5 10:09:49.344 [conn1]  external sort used : 5547 files in 62 secs 
Sun Jan 5 10:09:49.346 [conn1] Assertion: 16392:FileIterator can't open file: data/_tmp/esort.1388912927.0//file.233errno:24 Too many open files 

ich auf MaxOSX 10.9.1 arbeiten. Bitte helfen.

Antwort

7

Ich habe das gleiche Problem hatte (Ausführung eine andere Operation, aber immer noch, ein "Too many open files" -Fehler, und wie lese sagt, es scheint auf dem 'maxfiles' Limit auf der Maschine läuft mongod zu sein.

auf einem Mac, ist es besser, zu prüfen, Grenzen mit:

sudo launchctl limit 

Dies gibt Ihnen:

<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 bekommen war vorübergehend die Grenze höher gesetzt (meins war ursprünglich so etwas wie weich: 256, hart: 1000 oder so komisch wie das):

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

limit maxfiles 1024 2048 

(oder fügen Sie diese Zeile zu Ihrer vorhandenen Datei launchd.conf hinzu, wenn Sie bereits eine haben).

Dies wird die Maxdatei über launchctl für jede Shell bei der Anmeldung festlegen.

3

kann es zu this

try bezogen werden Systemkonfiguration mit dem folgenden Befehl in Terminal

zu überprüfen ulimit -a

4

Ich habe eine temporäre ulimit -n 4096 vor dem Wiederherstellungsbefehl hinzugefügt. können Sie auch verwenden mongorestore --numParallelCollections=1 ... und das scheint zu helfen. Aber immer noch scheint der Verbindungspool erschöpft zu sein.

+2

'sudo launchctl Grenze maxfiles 512 1024' würde mein System zum Absturz bringen, zumindest mit zsh ' update_terminalapp_cwd: 4: Rohr fehlgeschlagen: zu viele offene Dateien im System zsh: Rohr fehlgeschlagen: zu viele offene Dateien im System sudo launchctl limit maxfiles 512 update_terminalapp_cwd: 4: Rohr fehlgeschlagen: zu viele offene Dateien im System zsh: Rohr fehlgeschlagen: zu viele offene Dateien im System ' – dcsan