如何让Redis Server运行更稳定

  • 尽量避免性能抖动(因为redis是单线程的,所以应该避免)
    • 大范围的数据读取 ( MGET, ZRANGE, SORT / LREM / SUNION / SDIFF / SINTER, KEYS, SMEMBERS, HGETALL )
    • 谨慎使用block command ( BLPOP / BRPOPLPUSH / BRPOP / MULTI / EXEC )
  • 注意内存使用
    • 和1中一样,要注意大范围数据读取造成的内存使用增加过多
    • 和内存配置相关的设置
      • maxmemory ( 50% of total memory )
      • 设置系统overcommit_memory=1(分配内存时,永远假装有足够的内存)
      • 开启swap,与内存大小一致
      • 设置系统zone_reclaim_mode为0,所以可以启用NUMA模式的remote memory分配模式
      • 对于kenerl = 3.5-rc1,设置vm.swappiness = 1 ( 有swap就用swap, 而不是oom )
      • echo –15 > /proc/`pidof redis-server`/oom_adj ( 减少redis进程因为oom被kill的可能性)。oom发生时,优先kill其他进程
      • 关闭BGSAVE / BGREWRITEAOF, 改为手动执行
  • 尽量让字符串长度在5KB以内

 

NUMA模式

在NUMA CPU模式下,系统内核都是优先使用直接attach到某个cpu core上的memory,在没有设置zone_reclaim_mode=0时,如果某个cpu attach的memory不够了,那么操作系统将优先swap local memory,这样会造成有用的page被swap out,而其他cpu core还有很多free memory。启用zone_reclaim_mode=0是,系统内核将优先到别的cpu core管理的内存去获取内存。

如何让Redis Server运行更稳定_第1张图片

你可能感兴趣的:(如何让Redis Server运行更稳定)