同机运行多Redis实例时max-memory内存上限合理配置咨询
问题1解答:每台8核服务器双Redis实例设置14GB
maxmemory是否合理? 该配置不合理,不能直接将剩余用户可用内存对半分配,核心原因如下:
- Redis除数据存储占用的内存外,还需要预留额外空间支撑运行时开销:Copy-On-Write(写时复制)开销(开启RDB/AOF持久化fork子进程时产生,高写入场景下极端需要预留和实例数据量对等的内存)、主从复制缓冲区、客户端连接缓冲区、Lua脚本运行内存等,这部分开销通常需要占
maxmemory的20%~30%以上。 - 服务器除两个Redis实例外,还会运行监控、日志采集等其他附属进程,也需要占用少量内存。
推荐合理取值:
- 若开启持久化:单实例
maxmemory建议设为8GB10GB,两个实例合计占用16GB20GB,剩余8GB~12GB留给两个实例的COW开销、运行时缓冲区以及系统预留空间。 - 若完全关闭持久化且主从复制流量极低:单实例
maxmemory最多可设为11GB12GB,两个实例合计占用22GB24GB,预留4GB~6GB给运行时开销和其他进程。
问题2解答:单核CPU场景下是否可将单实例
maxmemory设为28GB? 绝对不可,该认知存在明显偏差:
- 单核CPU同一时间仅运行一个进程,仅代表CPU的调度逻辑,不代表非运行状态的进程数据会被从物理内存中清除。操作系统只要物理内存充足,会保留所有活跃进程的内存数据,仅当物理内存不足时才会将冷内存页交换到swap分区。
- 若两个实例
maxmemory均设为28GB,只要两者实际占用内存总和超过28GB,就会触发系统内存不足:轻则触发swap导致Redis性能暴跌几十甚至上百倍,重则触发系统OOM机制直接杀掉Redis进程,完全无法保证服务可用性。 - 页表的加载/卸载只是进程上下文切换的环节之一,和进程实际占用的物理内存大小没有关联,哪怕是单核场景,同一台机器上所有进程的内存占用总和也不能超过用户可用内存上限。
内容的提问来源于stack exchange,提问作者ringord
相关产品推荐
相关产品推荐

