我在 Windows 环境下对 MongoDB 进行了简单测试。ID(int32)和缓冲区(byte[4096])的单个对象集合正在按顺序填充。在达到近 15G(总共 16G)RAM 后,环境出现故障。一些应用程序被终止,桌面更改了分辨率,然后完全挂起。硬重启后,我在 mongo 日志中发现了很多这样的记录:
VirtualProtect 失败 (mcw) e:/Databases/+MongoDB/TestFS/TestFS.7 256400000000 4000000 errno:1455 分页文件太小,无法完成此操作。
MapViewOfFile 失败 e:/Databases/+MongoDB/TestFS/TestFS.26 errno:1450 系统资源不足,无法完成请求的服务。
此外,MongoDB 无法再连接(任何数据库)。日志已启用。日志中没有任何错误。我只能通过删除日志和损坏的数据库来修复它。这与我希望在生产中看到的行为相去甚远,但我知道,目前有很多生产安装。所以我试图了解,我错过了什么或做错了什么。
答案1
好的。让我们看看如何运行生产 MongoDB 集群(是的,集群……您不想要只有一台服务器)
1) 使用 Linux。说真的。它的内存管理等比 Windows 更可预测。你也更有可能找到能帮助你在 Linux 上调优 Mongo 服务器的人。
2) 为其提供大量 RAM。RAM 很便宜。我刚刚为 $job 配置了一些生产级服务器,它们是 36GB 的快速 ECC DDR3。
3) 为其提供快速磁盘。SAS 很好,我认为 SSD 可能更好,但我还没有专门测试过。
4)碎片。选择一个合适的分片键,并以此为基础在多个 MongoDB 节点上进行分片。
5)重要的是。确保你有一个服务器集群,仍然可以执行一致票数。
6) 真的很重要。保护它。更改默认的管理员用户名和密码,并将其置于防火墙后面。
说真的。我认为你应该看看上面的观点,也读读这些生产部署. 10gen 不遗余力地为 MongoDB 提供大量文档,我怀疑您还没有完整地阅读完所有文档。