WiredTiger - 在重新同步辅助副本集成员期间"太多打开文件错误"

Bar*_*man 5 mongodb wiredtiger

我正在将辅助副本集成员升级到wiredTiger.我已将它从MongoDB 2.6.3升级到3.0.4并将存储引擎更改为wiredTiger.现在它正在重新同步主数据库中的所有数据.在某些时候收到以下错误,并且该过程重新开始:

2015-07-22T13:18:55.658 + 0000 I INDEX [rsSync]使用批量方法构建索引

2015-07-22T13:18:55.664 + 0000我完成了INDEX [rsSync]构建索引.共扫描了1591条记录.0秒

2015-07-22T13:18:56.397 + 0000 E STORAGE [rsSync] WiredTiger(24)[1437571136:397083] [20413:0x7f3d9ed29700],file:WiredTiger.wt,session.create:WiredTiger.turtle:fopen:打开太多档

2015-07-22T13:18:56.463 + 0000 E REPL [rsSync] 8 24:打开文件太多

2015-07-22T13:18:56.463 + 0000 E REPL [rsSync]初始同步尝试失败,剩余9次尝试

同一台机器之前运行的是2.6.3版本,没有任何打开文件限制问题.我知道wiredTiger可能会创建更多的文件,所以它必须是它,但它是否会同时打开它们?

以供参考:

cat/proc/sys/fs/file-max

10747371

在/etc/init.d/mongod中配置为:

ulimit -n 64000

根据文档,似乎mongo为每个数据文件保存文件描述符.与在wiredTiger中一样,这导致每个集合的文件+每个索引的文件,根据我们的用例计算,可以加起来超过700K.

所以我可以将ulimit更改为700000或更高,但我想知道这是否是最正确的解决方案,以及存在哪些替代方案.

Ada*_*ord 4

WiredTiger 将根据打开的文件描述符的空闲时间来清理它们,但是在大量集合和索引的繁重活动期间,您最终将受到打开文件的 ulimit 的限制。

所以,是的,基本上您需要增加限制,直到不再遇到问题,坚持使用 MMAPv1,或合并一些集合。我还建议提交一份功能请求,概述您的用例和示例编号,以找到一种防止这种类型模式的方法(例如,每个文件有多个集合)。