打开文件太多,同时确保索引mongo

Pio*_*ski 8 database macos full-text-search mongodb nosql

我想在mongo集合上创建文本索引.我写

db.test1.ensureIndex({'text':'text'})
Run Code Online (Sandbox Code Playgroud)

然后我在mongod过程中看到了

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
Run Code Online (Sandbox Code Playgroud)

我在MaxOSX 10.9.1上工作.请帮忙.

dpb*_*dpb 10

我遇到了同样的问题(执行不同的操作,但仍然是"太多的打开文件"错误),并且正如lese所说,它似乎是运行mongod的机器上的'maxfiles'限制.

在Mac上,最好通过以下方式检查限制:

sudo launchctl limit
Run Code Online (Sandbox Code Playgroud)

这给你:

<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  
Run Code Online (Sandbox Code Playgroud)

我解决这个问题的方法是暂时将限制设置得更高(我本来就像软件一样:256,硬:1000或类似奇怪的东西):

sudo launchctl limit maxfiles 1024 2048
Run Code Online (Sandbox Code Playgroud)

然后重新运行查询/索引操作,看它是否中断.如果没有,并且为了保持更高的限制(当你注销shell会话时它们将被重置),用以下行创建一个'/etc/launchd.conf'文件:

limit maxfiles 1024 2048
Run Code Online (Sandbox Code Playgroud)

(或者将该行添加到现有的launchd.conf文件中,如果已有的话).

这将在登录时通过launchctl在每个shell上设置maxfile.

  • 不幸的是,这个答案对于莫哈韦来说已经过时了。它会导致系统崩溃。 (4认同)

dcs*_*san 6

ulimit -n 4096在恢复命令之前添加了一个临时的。你也可以使用 mongorestore --numParallelCollections=1 ...,这似乎有帮助。但是连接池似乎仍然耗尽。

  • `sudo launchctl limit maxfiles 512 1024` 会导致我的系统崩溃,至少对于 zsh `update_terminalapp_cwd:4: 管道失败:系统中打开的文件太多 zsh: 管道失败:系统中打开的文件太多 sudo launchctl limit maxfiles 512 update_terminalapp_cwd :4: 管道失败: 系统中打开的文件太多 zsh: 管道失败: 系统中打开的文件太多` (11认同)

les*_*ese 5

可能与有关

尝试在终端中发出以下命令来检查您的系统配置

ulimit -a