两万字 redis.conf 7.0 配置和原理全解,生产王者必备(12)


在同时满足上面三项配置时,内存碎片自动整理功能才会启用 。
CPU 资源占用

MySQL:如何避免自动内存碎片整理对性能造成影响?
清理的条件有了,还需要分配清理碎片占用的 CPU 资源,保证既能正常清理碎片,又能避免对 Redis 处理请求的性能影响 。
active-defrag-cycle-min 5:自动清理过程中,占用 CPU 时间的比例不低于 5%,从而保证能正常展开清理任务 。
active-defrag-cycle-max 20:自动清理过程占用的 CPU 时间比例不能高于 20%,超过的话就立刻停止清理,避免对 Redis 的阻塞,造成高延迟 。
整理力度

active-defrag-max-scan-fields 1000:碎片整理扫描到set/hash/zset/list 时,仅当 set/hash/zset/list的长度小于此阀值时,才会将此键值对加入碎片整理,大于这个值的键值对会放在一个列表中延迟处理 。

active-defrag-threshold-upper 100:内存碎片空间占操作系统分配给 Redis 的总空间比例达此阈值(默认 100%),我会尽最大努力整理碎片 。建议你调整为 80 。
1、jemalloc-bg-thread
默认配置为 jemalloc-bg-thread yes,表示启用清除脏页后台线程 。
【两万字 redis.conf 7.0 配置和原理全解,生产王者必备】2、绑定 CPU
你可以将 Redis 的不同线程和进程绑定到特定的 CPU,减少上下文切换,提高 CPU L1、L2 Cache 命中率,实现最大化的性能 。
你可以通过修改配置文件或者taskset命令绑定 。
可分为三个模块 。
  • 主线程和 I/O 线程:负责命令读取、解析、结果返回 。命令执行由主线程完成 。
  • bio 线程:负责执行耗时的异步任务,如 close fd、AOF fsync 等 。
  • 后台进程:fork 子进程(RDB bgsave、AOF rewrite bgrewriteaof)来执行耗时的命令 。
Redis 支持分别配置上述模块的 CPU 亲合度,默认情况是关闭的 。
  • server_cpulist 0-7:2,I/O 线程(包含主线程)相关操作绑定到 CPU 0、2、4、6 。
  • bio_cpulist 1,3,bio 线程相关的操作绑定到 CPU 1、3 。
  • aof_rewrite_cpulist,aof rewrite 后台进程绑定到 CPU 8、9、10、11 。
  • bgsave_cpulist 1,10-11,bgsave 后台进程绑定到 CPU 1、10、11 。
注意事项
  1. Linux 下,使用 「numactl --hardware」 查看硬件布局,确保支持并开启 NUMA 。
  2. 线程要尽可能分布在 不同的 CPU,相同的 node,设置 CPU 亲和度才有效,否则会造成频繁上下文切换 。
  3. 你要熟悉 CPU 架构,做好充分的测试 。否则可能适得其反,导致 Redis 性能下降 。
文章来源:
https://segmentfault.com/a/1190000043845458




推荐阅读