【问题标题】:Problems with memory usage of mongo db servermongodb服务器内存使用问题
【发布时间】:2014-02-04 17:03:01
【问题描述】:

我有一个运行在 512MB RAM 的 webfaction 服务器上的 mongod 进程。我有一个 MongoDB 数据库,其中包含两个大小为 10MB 和 2GB 的集合。每当我通过 mongo shell 对我的集合运行查询时,RAM 使用量会增长得异常高,并且服务器会被托管服务提供商自动终止。

有没有办法控制mongod服务器的内存使用?我究竟做错了什么? PS:请指导我,因为我是 MongoDB 的新手并且正在做一些实验。

【问题讨论】:

  • 您的查询是什么,您可能需要添加一些索引。 Mongo 不得不将整个集合拉到 RAM 中进行搜索。
  • 提供数据架构和查询类型会很有帮助。此外,如前所述,存在索引。
  • 数据基本包含facebook个人资料和用户点赞数。
  • 我正在对数据运行搜索查询和聚合查询。另外,我没有使用任何索引
  • 听起来您可能已经回答了自己的问题:)。如果您没有添加任何二级索引,那么除了 _id 查询之外的任何内容都必须扫描整个集合。 Creating appropriate indexes 应该是您的起点。如果您不确定要添加什么索引,您可能需要发布一个单独的问题,其中包含示例文档以及您通常需要执行的查询/更新类型。

标签: mongodb webfaction


【解决方案1】:

这是一个有问题的设置,您在代码方面无能为力。问题是您的应用程序被杀死,因为它需要 RAM。 MongoDB 对 RAM 非常贪婪,并且会尽力获取它所能得到的。通过小心避免更大的结果集和大量数据,您可能会稍微延迟这个问题,但如果这不可能,您为什么要首先使用网络规模的数据库?

使用为您提供固定 RAM 量的提供程序,以便 MongoDB 知道它可以分配多少 RAM。这可能不会很快,但至少它不会简单地杀死服务。

即使您有非常好的索引,至少索引应该适合 RAM。如果操作系统需要说 100MB(这是非常保守的),那么您只剩下 400MB 用于 10GB 数据存储。实际上,在 RAM 中可能只剩下 200MB 用于实际数据存储,这对于 10GB 数据库来说似乎是低端。

即便如此,也不要针对不必要的严格限制对您的软件进行编码。具有 1-2GB RAM 的虚拟机并不昂贵,但更重要的是,确保 RAM 得到保证和固定(没有“提升”RAM)。

【讨论】:

  • 知道了,有没有办法限制 mongo 使用指定数量的 RAM?
  • 这很可悲。好吧,我想我可以对 webfaction 进行有限的测试,我需要一个好的配置服务器
【解决方案2】:

避免 mongodb 因内存而崩溃的另一种方法是向您的操作系统添加交换,但是当您的数据库很大时,这会降低性能。

我已按照How To Add Swap on Ubuntu 14.04 中的步骤进行操作,因此我的 mongodb 实例永远不会崩溃。我在 512MB AWS 实例上运行 mongodb,其中包含 1.5GB 集合和多个 512MB 集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2011-02-14
    • 2023-03-29
    相关资源
    最近更新 更多