5

我正在将辅助副本集成员升级到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 I INDEX [rsSync] 构建索引完成。共扫描了 1591 条记录。0 秒

2015-07-22T13:18:56.397+0000 E STORAGE [rsSync] WiredTiger (24) [1437571136:397083][20413:0x7f3d9ed29700],文件: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 或更高,但我想知道这是否是最正确的解决方案,以及存在哪些替代方案。

4

1 回答 1

4

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

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

于 2015-07-23T20:54:08.107 回答