[英]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.