【问题标题】:Calculating redis max memory when running multiple redis instance in same machine在同一台机器上运行多个redis实例时计算redis最大内存
【发布时间】:2021-11-11 10:39:18
【问题描述】:

我想建立一个 Redis 集群,其中包含 6 个 Redis 实例和 3 台机器(所以 2 个 Redis 实例和一台机器),每个具有 32GB 内存,8 核 CPU。 我不确定 Redis 最大内存配置需要多少字节。

  1. 考虑到操作系统使用了 4GB 内存,我想还有 28GB 留给用户进程。 而且由于在多核环境中运行 2 个 Redis 实例,我认为我应该为每个 Redis 实例设置 14GB 的最大内存配置值,因为这两个进程都同时启动和运行。但我不确定。对于这种情况,哪个最大内存值是正确的?

  2. 我记得操作系统会为每个进程保存页表,并在内核在进程上工作时将进程的页表加载和卸载到物理内存中。那么在32GB内存的单核CPU环境下,每个实例的最大内存设置为28GB可以吗,因为只会有一个进程同时运行?

【问题讨论】:

    标签: redis operating-system


    【解决方案1】:

    通常不建议在一台机器上使用多个 Redis 实例。由于 CPU 的 L3 缓存无法有效工作。如果您希望 Redis 更有效地运行,您可以手动将 Redis 实例绑定到不同的 cpu 核心。

    然后,最大内存。

    1. 如果您使用RDB 进行数据保存。答案是 7GB。 BGSAVE 线程将从主线程分叉,COW(Copy-on-write) 将在新写入时复制页表,因此它将使用另外 7GB 的最大值。两个 Redis 实例将花费 28GB。
    2. 单核CPU环境对Redis不友好。我建议双核。最大内存为 14GB。

    【讨论】:

    • 所以如果使用aof或者配置无数据保存,每个redis使用14GB最大内存就可以了。对于第二个答案,我认为您建议使用两个核心以防使用 RDB 数据保存。假设不使用RDB备份,1、单核cpu环境下redis可以吗? 2.如果在单核环境中运行两个redis(无备份,总共32GB中每个14GB),我认为上下文切换和内存加载,卸载必须有成本。是否有任何性能统计数据可以比较多核和单核环境中的性能?
    • 在同一台机器上运行 1 个主实例和 1 个从属实例是否相同? (Machine1 - Master1 Slave2, Machine2 - Master2 Slave3, Machine3 - Master3 Slave1)
    • 如果配置不保存数据,那么14GB单核也可以。如果配置 aof,则 aof 将 fork bgrewriteaof 线程,建议使用两个内核,aof 模式的最大内存取决于您配置的 aof rewrite min size 和百分比。如果您没有大量密钥,那么 14GB 也可以。
    • 主从都是一样的,都需要运行bgsave或者bgrewriteaof线程来保存数据。
    • 谢谢。这个问题实际上与redis无关,如果我运行2个redis实例,每个实例都有28GB内存,而总内存为32GB,操作系统将如何管理内存?它会在交换中加入一些部分,并根据进程使用情况加载和卸载它们吗?
    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2012-08-11
    相关资源
    最近更新 更多