Redis内存

半腔热情 提交于 2020-08-07 14:56:13

Redis内存消耗:自身内存 + 对象内存 + 缓冲内存 + 内存碎片

  1. 自身内存:Redis进程自身内存占用量很小,大约在3.8M左右。
  2. 对象内存:sizeof(keys) + sizeof(values),键和值的内存都需要关注
  3. 缓冲内存:主要包括客户端缓冲、复制积压缓冲区、AOF缓冲区
    • 客户端缓冲:指所有接入到Redis服务器TCP连接的输入输出缓冲,超过1G会自动断开
    • 复制积压缓冲区:用于实现部分复制功能补救措施的缓冲区
    • AOF缓冲区:Redis重写期间保存最近的写入命令,消耗内存取决于AOF重写时间及写入命令量
  4. 内存碎片:Redis默认使用jemalloc分配器、可选glibc、tcmalloc,为了更好的管理和复用内存,一般采用内存块进行分配,通常采用数据对齐或安全重启处理内存碎片超标情况

子进程内存消耗:子进程fork后与父进程享有同一物理内存,AOF/RDB期间父进程处理写请求时会复制出请求的页副本进行写操作,子进程依然读取父进程快照

  1. Redis fork期间产生的子进程需要消耗的内存由持久化期间写入命令量决定
  2. 设置sysctl vm.overcommit_memory = 1允许内存分配所有的物理内存
  3. 排查当前系统是否支持THP,防止copy-on-write期间内存过度消耗
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!