如何调整 Linux 上 mongoDB 的系统设置?

如何调整 Linux 上 mongoDB 的系统设置?

我试图从一个问题中得出很多信息 — — 请忍耐一下。

尽管 MongoDB 手册页对系统设置(如 ulimit )提出了一些有用的建议(http://docs.mongodb.org/manual/reference/ulimit/)和其他生产要素(http://docs.mongodb.org/manual/administration/production-notes/)他们似乎对诸如虚拟内存和交换设置。

我们最接近的提示是“...操作系统的虚拟内存子系统管理 MongoDB 的内存...”(http://docs.mongodb.org/manual/faq/fundamentals/#does-mongodb-require-a-lot-of-ram)。

在我的 4 处理器、4GB RAM 的 MacBook 和 8 核 Ubuntu 机器(64GB RAM)上运行相同的作业(单个集合中大约 10,000,000 条记录的高写入和高读取),我发现出厂设置的 Linux 机器的读取性能明显变差,并且可以听到磁盘不断旋转,这表明 I/O 很高,可能正在交换。是的,机器上还发生了其他事情,但有足够的可用 RAM、磁盘空间等;此外,我确实不是有证据表明,Mongo 正在扩展以利用所有可用 RAM,正如它所宣传的那样。

Linux 机器默认设置如下:vm.swappiness =60 vm.dirty_background_ratio = 10 vm.dirty_ratio = 20 vm.dirty_expire_centisecs =3000 vm.dirty_writeback_centisecs=500

我查看了其他类型数据库(Oracle、MYSQL 等)的文档和博客,做了一些猜测,进行了实验,并进行了如下调整。vm.swappiness=10 vm.dirty_background_ratio=5 vm.dirty_ratio=5 vm.dirty_writeback_centisecs=250 vm.dirty_expire_centisecs=500

我立即看到了读取时间的一些明显改善。然而,当我再次运行测试作业时,在大量写入期间,读取性能仍然非常缓慢。

然后,我从可用数据源重建了集合 - 突然间我可以在执行写入作业的同时以每条记录 1 毫秒或更短的速度读取!

因此,问题实际上是双重的:

1)Linux 上 MongoDB 的适当 VM 设置是什么? 2)(奖金) Mongo 在构建数据时是否会对操作系统进行一些检查或优化? 换句话说,如果我使用次优的 VM 或 I/O 设置构建了一个大型数据集,Mongo 是否会在内存映射过程中做出假设,而这些假设将无法利用未来的优化?

显然,我并没有完全理解底层的内存映射(我希望我不需要这么做)。

任何帮助表示感谢...谢谢!-j

答案1

我认为您的 4 GB RAM 的情况对于 Neo4j 来说已经足够好了,因为它也使用内存映射 IO,因此应该采用相同的调整措施:

http://docs.neo4j.org/chunked/stable/linux-performance-guide.html

所以通过阅读我认为你的

vm.dirty_ratio=5
vm.dirty_background_ratio=5 

太低而不是太高。

相关内容