繁体   English   中英

如何限制 docker 容器内的 ArangoDB RAM 使用?

[英]How to limit ArangoDB RAM usage inside of a docker container?

我们将 ArangoDB 3.3.14(社区版)与 MMFiles 存储引擎一起用于相对较大的数据集(备份时超过 30 GB)。 我们使用 ECS 在 docker 容器内运行它。 我们的主机 VM 有 64 GB 的 RAM,我们有 55 GB 专用于 ArangoDB 容器(我们将该容器的硬限制设置为 55 GB)。

当 ArangoDB 刚刚启动并将所有集合加载到 RAM 中时,大约需要 45 GB,因此我们有大约 10 GB 的空闲 RAM 可用于查询等。

问题是一段时间后(取决于使用情况)ArangoDB 吃掉了所有 55 GB 的 RAM 并且并没有停在那里。 它继续消耗超过设置的硬限制的 RAM,并且在某些时候,docker 使用退出代码 137 和状态原因杀死容器,OutOfMemoryError:由于内存使用而导致容器被杀死。

重启给我们带来了很多问题,因为我们需要等到所有集合和图形再次加载回 RAM 中。 我们的数据集大约需要 1-1.5 小时,并且您无法在“重新启动”时使用 ArangoDB。

我的问题是如何限制 ArangoDB RAM 的使用,比如 54 GB,所以它永远不会达到为 docker 容器设置的硬内存限制?

在 3.3.20 中,ArangoDB 引入了限制写入缓冲区的参数 {{total-write-buffer-size}}。 您可以尝试将其添加到您的配置文件中:

[rocksdb]
block-cache-size = <value in bytes>  # 30% RAM
total-write-buffer-size = <value in bytes>  # 30% RAM
enforce-block-cache-size-limit = true

[cache]
size = <value in bytes>  # 20% RAM

或者您可以将参数传递给命令行:

arangod --cache.size <value in bytes>  # 20% RAM \
    --rocksdb.block-cache-size <value in bytes>  # 30% RAM \
    --rocksdb.total-write-buffer-size <value in bytes>  # 30% RAM \
    --rocksdb.enforce-block-cache-size-limit true 

您还可以根据您的使用情况调整每个组件分配的内存量。 但是你至少要升级到 3.3.20。

是的,对,这些特定参数是针对 RocksDB 的(除了 --cache.size)。 可能在你的情况下最好转向 ROcksDB,它有几个优点:

  • 文档级锁
  • 支持大数据集
  • 持久索引

您还可以限制内存消耗(从 Linux 上的 3.3.20 开始)。 使用 MMFILES,集合和索引都必须适合内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM