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

时间:2014-01-05 09:18:27

标签: mongodb macos full-text-search database nosql

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

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

然后我在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

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

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题(执行了不同的操作,但仍然是#34;太多的打开文件"错误),而且正如lese所说,它似乎归结为&# 39; MAXFILES'限制机器运行mongod。

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

sudo launchctl limit

这会给你:

<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  

我解决这个问题的方法是暂时将限制设置得更高(我原本是软的:256,硬:1000或类似的东西):

sudo launchctl limit maxfiles 1024 2048

然后重新运行查询/索引操作并查看它是否中断。如果没有,并且为了保持更高的限制(当你退出shell会话时它们将重置,你将它们设置为开启),创建一个&#39; /etc/launchd.conf'文件包含以下行:

limit maxfiles 1024 2048

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

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

答案 1 :(得分:4)

可能与this

有关

尝试检查系统配置,在终端

中发出以下命令
  

ulimit -a

答案 2 :(得分:4)

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